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

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

djangorest框架序列化器-不返回空列表字段

djangorest框架序列化器-不返回空列表字段

胡說叔叔 2023-09-26 16:49:38
我有一個包含 JsonField 的模型的序列化器。我希望始終返回特定字段,即使在 jsonField 中找不到它們。當調用“get”時,它確實返回序列化器中的所有字段,但是當調用“update”時,它返回帶有更新字段 和 的實例,allow_null=True因此default=list未更新的字段將不會在響應中返回。問題是我如何仍然返回所有序列化器字段作為響應,包括字段default=list,即使它們沒有更新并且不存在?這是序列化器 -class ObjectsListSerializer(serializers.Serializer):    days = serializers.IntegerField(allow_null=True, source='objects_list.days')    user_list = serializers.ListField(child=serializers.CharField(), default=list, allow_empty=True, required=False, source='objects_list.user_list')    manager = serializers.CharField(allow_null=True, source='objects_list.manager')    def update(instance, validated_data):                if 'objects_list' in validated_data:        for attr, value in validated_data['objects_list'].items():            instance.objects_list[attr] = value        instance.save()        return instance如前所述,當發送“get”請求時,即使“objects_list”為空,我也會得到days=Noneuser_list=[]manager=None在回應中但是,當 user_list 不存在并且我正在更新其他字段(例如“天”)時,響應中將不存在“user_list”。知道當空列表不存在時如何仍然返回空列表嗎?
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

據我了解,您正在使用部分更新。對于部分更新序列化程序,如果無法檢索該字段,則從響應中跳過該字段。顯然它無法檢索,因為objects_listNone,所以objects_list.user_list引發AttributeError。

因此,為了使其按您希望的方式工作,您應該在視圖中手動返回完全序列化的數據:

def partial_update(self, request, pk=None):

? partial_serializer = self.get_serializer(self.get_object(), data=request.data, partial=True)

? partial_serializer.is_valid(raise_exception=True)

? instance = partial_serializer.save()

? # Saved, now return all attributes (not using partial=True here):

? return Response(self.get_serializer(instance).data)


查看完整回答
反對 回復 2023-09-26
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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