使用请求数据覆盖序列化程序,包括缺少键的空值

时间:2015-01-14 15:54:41

标签: python django django-rest-framework serializer

让我们假设有serializer这样:

class EventSerializer(serializers.ModelSerializer):

    class Meta:
        model = Event
        fields = (
            'title',
            'description'
        )

description可以为空的地方。我想要的是请求数据完全覆盖PUT请求上的串行器数据(显然更新现有模型实例时)。如果我这样做:

event_serializer = EventSerializer(event, data=request_data)

它会覆盖所有内容,但如果请求中没有description,则不会使其data['description'] = data.get('description', None) 无效。有没有办法在不手动的情况下做到这一点:

{{1}}

1 个答案:

答案 0 :(得分:1)

一种选择是在序列化程序中定义description字段并使用default,如:

class EventSerializer(serializers.ModelSerializer):

    # Use proper field type here instead of CharField
    description = serializers.CharField(default=None)

    class Meta:
        model = Event
        fields = (
            'title',
            'description'
        )

同时查看documentation

  

默认

     

如果设置,则提供将用于的默认值   如果没有提供输入值,则为字段。如果未设置默认行为   是根本不填充属性。

     

可以设置为函数或其他可调用函数,在这种情况下为值   将在每次使用时进行评估。

     

请注意,设置默认值意味着该字段不是   需要。包括默认和必需的关键字参数是   无效并会引发错误。