Python django rest框架序列化程序-不';t返回空列表字段

Python django rest框架序列化程序-不';t返回空列表字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个包含JsonField的模型的序列化程序。我希望始终返回特定字段,即使在jsonField中找不到它们。 调用“get”时,它会返回序列化程序中的所有字段,但调用“update”时,它会返回带有更新字段的实例和allow\u null=True,因此default=list未更新的字段不会在响应中返回。问题是,我如何仍然返回所有序列化程序字段作为响应,包括default=list字段,即使这些字段未更新且不存在 这是序列化程序- class ObjectsListSerializer(s

我有一个包含JsonField的模型的序列化程序。我希望始终返回特定字段,即使在jsonField中找不到它们。 调用“get”时,它会返回序列化程序中的所有字段,但调用“update”时,它会返回带有更新字段的实例和
allow\u 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\u list”为空,我也会得到

days=None
user_list=[]
manager=None
在答复中

但是,当用户列表不存在并且我正在更新其他字段(例如“天”)时,“用户列表”将不存在于响应中。
你知道当空列表不存在时,我怎么还能返回它吗?

据我所知,你使用的是部分更新。对于部分更新序列化程序,如果无法检索某个字段,则从响应中跳过该字段(请参见源代码)。显然,它无法检索,因为
对象列表
,所以
对象列表。用户列表
引发
属性错误

因此,要使其正常工作,您应该在视图中手动返回完全序列化的数据:

def部分更新(self,request,pk=None):
partial\u serializer=self.get\u serializer(self.get\u object(),data=request.data,partial=True)
部分序列化程序。是否有效(raise\U exception=True)
instance=partial_serializer.save()
#已保存,现在返回所有属性(此处不使用partial=True):
返回响应(self.get\u序列化程序(实例).data)

据我所知,您正在使用部分更新。对于部分更新序列化程序,如果无法检索某个字段,则从响应中跳过该字段(请参见源代码)。显然,它无法检索,因为
对象列表
,所以
对象列表。用户列表
引发
属性错误

因此,要使其正常工作,您应该在视图中手动返回完全序列化的数据:

def部分更新(self,request,pk=None):
partial\u serializer=self.get\u serializer(self.get\u object(),data=request.data,partial=True)
部分序列化程序。是否有效(raise\U exception=True)
instance=partial_serializer.save()
#已保存,现在返回所有属性(此处不使用partial=True):
返回响应(self.get\u序列化程序(实例).data)

请显示get和UPDATE的视图我正在使用内置的
mixin.UpdateModelMixin
。没有更改请显示get和Update的视图我正在使用内置的
mixin.UpdateModelMixin
。没有更改,我正在使用部分更新。我将尝试并在这里更新。谢谢,我正在使用部分更新。我将尝试并在这里更新。谢谢