2013-11-05 58 views
21

從文檔:需要Django的REST框架串行字段=假

READ_ONLY 設置爲真,以確保序列化的表示當該字段被使用,但反序列化期間更新實例時不被使用。

默認爲false

需要 通常如果反序列化期間未提供字段中的錯誤將被提高。如果在反序列化過程中不需要此字段,則設置爲false。

默認爲True。

所以我其中有一個字段,其不可爲空的模型,但我想它在pre_save方法來填充,所以我的字段設置爲串行required=False,但似乎並沒有工作。保存記錄時,我仍然遇到錯誤。

class FavoriteListSerializer(serializers.ModelSerializer): 
    owner = serializers.IntegerField(required=False) 
    class Meta: 
     model = models.FavoriteList 

更新: 我已經加入serializer_class = serializers.FavoriteListSerializer到視圖集,現在不是讓This field is required,我認爲有過去的驗證,但隨後我得到This field cannot be null.我已經檢查沒有被執行,任何想法的pre_save方法?

回答

26

是的,我也遇到過這個問題。您還需要更新驗證排除。

class FavoriteListSerializer(serializers.ModelSerializer): 
    owner = serializers.IntegerField(required=False) 
    class Meta: 
     model = models.FavoriteList 

    def get_validation_exclusions(self): 
     exclusions = super(FavoriteListSerializer, self).get_validation_exclusions() 
     return exclusions + ['owner'] 
+0

嗯,我看到了,根據你的回答,我嘗試添加驗證器= []串行器領域,仍然無法正常工作。這種東西不像廣告中那樣工作...... –

+0

您是否添加了'get_validation_exclusions()'方法?它覆蓋模型上現有的驗證。 –

+0

是的,添加該方法後工作。我試圖添加validators = []以避免覆蓋get_validation_exclusions(),但它不起作用 –

5

如果有人土地在這裏有類似的問題,要注意以下屬性與required一起:

allow_blank

如果設置爲True然後空字符串應該被認爲是有效值。

allow_null

一般來說,如果None傳遞給串行場的錯誤將得到提升。

required

通常如果反序列化期間未提供字段中的錯誤將被提高。

我掉隊弄清楚爲什麼我得到驗證錯誤與required=False,我已經錯過了allow_null屬性。

+0

還檢查數據庫是否具有帶NOT NULL選項的列。 – ozw1z5rd