我有一個包含 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_list
是None
,所以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)
添加回答
舉報
0/150
提交
取消