簡體   English   中英

如何使ModelSerializer DRF中的ListField不強制

[英]How to make ListField in ModelSerializer DRF not mandatory

我想要Django模型中的一個字段來存儲字符串列表(出於某些原因,我不想使用相關字段,僅驗證用戶是否發送了正確的列表)。

我的工作正常,問題是通過Django REST框架更新對象時,無法強制使該字段為非必填字段。

這是我的實現,我測試了一些具有相同結果的變體

class SomeModel(models.Model):
    hashtags = models.CharField(max_length=512, default=None, null=True, blank=True)

    @property
    def hashtags_as_list(self):
        """ Hashtags are stored on DB as a text json convert to object again
        """
        return json.loads(self.hashtags) if self.hashtags else None

    @hashtags_as_list.setter
    def hashtags_as_list(self, value):
        """ Hashtags are stored on DB as a text json of the list object
        """
        self.hashtags = json.dumps(value)

class SomeModelSerializer(serializers.ModelSerializer):
    hashtags = serializers.ListField(
        source='hashtags_as_list',
        default = [],
        required = False,
        child = serializers.CharField(min_length=3, max_length=32, required=False)
    )

僅當我在Browsable API上執行PUT時,才收到錯誤消息,檢查查詢是否將主題標簽發送為空白。

------WebKitFormBoundary4L5MFBPrRA0QDqFL
Content-Disposition: form-data; name="hashtags"


------WebKitFormBoundary4L5MFBPrRA0QDqFL

錯誤如下:

{
    "hashtags": [
        "This field may not be blank."
    ]
}

您正在發送hashtags發布數據,但不包含內容,這就是DRF返回該錯誤消息的原因。 您可以使用以下方法解決此問題:

hashtags = serializers.ListField(required=False, child=CharField(allow_blank=True, ...), ...)

但是請注意,當hashtags將規范化為空字符串時,您可能需要調整一些代碼來處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM