亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django Rest Framework - 定義必填字段

Django Rest Framework - 定義必填字段

DIEA 2021-12-26 14:34:55
編輯我只想在我這樣做時引發異常BrokerSerializer(user).data并且任何值是None我使用 DRF 來序列化對象以通過 API 導出它們,我不使用它來創建對象。在序列化模型時尋找一種最簡單的方法來使字段成為必需的。API 需要一些字段不為空,所以我想提高APIMissingDataException它們中的任何一個是否為空/無。我試過:class BrokerSerializer(serializers.ModelSerializer):    import_id = serializers.IntegerField(source='pk')    deleted = serializers.SerializerMethodField()    full_name = serializers.CharField(source='userprofile.get_display_name')    phone_work = serializers.CharField(source='userprofile.contact_information.telephone')    email_work = serializers.CharField(source='userprofile.contact_information.email')class Meta:    model = User    fields = ['import_id', 'deleted', 'full_name', 'phone_work', 'email_work']    required_fields = fieldsdef validate(self, attrs):    super().validate(attrs)    if not all([attrs.get(fieldname) for fieldname in self.Meta.required_fields]):        raise APIMissingDataException()    return attrsdef get_deleted(self, obj):    return 0但是validate由于某種原因沒有調用函數。我不想明確定義所有字段只是為了required=False向它們添加參數。In [10]: b = BrokerSerializer(User.objects.first())                                                                                                                                                  In [11]: b.data                                                                                                                                                                                       # It should have raised exception since there are NoneOut[11]: {'import_id': 1, 'deleted': 0, 'full_name': None, 'phone_work': None, 'email_work': None}In [12]: b = BrokerSerializer(data=User.objects.first())                                                                                                                                             In [13]: b.is_valid()                                                                                                                                                                                Out[13]: False有沒有更舒服的方法?
查看完整描述

2 回答

?
當年話下

TA貢獻1890條經驗 獲得超9個贊

DRF 具有處理它的內置方法。

name = serializers.CharField(label="name field",required=True, allow_blank=False, allow_null=False)

然后用于serializer.is_valid()驗證數據。

有關更多詳細信息,請參閱。


查看完整回答
反對 回復 2021-12-26
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

我希望這個答案在這里也適用:)

總結
驗證過程只在Deserialization過程(輸入是一個dict類似的對象)并且你正在嘗試一個Serialization過程時進行。在 的情況下Serialization,DRF 假定給定對象是有效對象,因此不需要驗證。

查看完整回答
反對 回復 2021-12-26
  • 2 回答
  • 0 關注
  • 386 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號