让我们假设有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}}
答案 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:
默认
如果设置,则提供将用于的默认值 如果没有提供输入值,则为字段。如果未设置默认行为 是根本不填充属性。
可以设置为函数或其他可调用函数,在这种情况下为值 将在每次使用时进行评估。
请注意,设置默认值意味着该字段不是 需要。包括默认和必需的关键字参数是 无效并会引发错误。