2015-07-09 40 views
1

0我有在Django的模型與IntegerField:Django的REST框架代 '空' 在IntegerField

class MyModel(models.Model): 
    number = models.IntegerField(default=0) 

我使用Django REST框架模型串行:

class MySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = MyModel 

這是JSON由REST框架創建的是:

{ 
    "number": null 
} 

問題是,如果我只是發佈它後驗證失敗已收到。爲了使接收到的JSON對象使用0而不是null作爲對象,我該如何更改?

+0

應該有在數據庫中,如果沒有空字段您可以通過串行改變驗證登錄解決這個問題的任何您的默認值爲0.在將默認修飾符添加到整數字段之前,是否偶然向數據庫中添加行? –

+0

不,我只是簡單地創建了一個對象,並且數據庫爲實體的字段顯示了值'0'。 – seawolf

回答

1

正如Mark Galloway所評論的,如果數據庫中有空數據,則會顯示null。

class MySerializer(serializers.ModelSerializer): 
    number = models.IntegerField(initial=0, allow_null=True) 
    class Meta: 
     model = MyModel 

或通過更改數據序列化回給用戶:

class MyIntegerField(serializers.IntegerField): 
    def to_representation(self, value): 
     if value is None: 
      return 0 
     return super(MyIntegerField, self).to_representation(value) 

class MySerializer(serializers.ModelSerializer): 
    number = MyIntegerField(initial=0) 
    class Meta: 
     model = MyModel 
+0

數據庫中的值不爲空,但由REST框架創建的表單將值留空。我不確定現在有什麼不同,但實體的JSON值創建的方式實際上是0,但它仍然在窗體中顯示爲空。所以無論到達序列化器的實體是null還是0,表單中的值似乎都是空的。 – seawolf