这是一个做Django Rest Framework Serializer更新方法的好方法吗?

时间:2017-12-12 10:31:06

标签: python django django-rest-framework

我注意到DRF文档说你应该在update方法中的validated_data dict中弹出每个字段:

def update(self, instance, validated_data):
    instance.email = validated_data.get('email', instance.email)
    instance.content = validated_data.get('content', instance.content)
    instance.created = validated_data.get('created', instance.created)
    instance.save()
    return instance

但是,假设您有一个包含大量字段的模型。做下面这样的事情会不容易?或者我错过了什么?

    def update(self, instance, validated_data):
        for attr, value in instance.__dict__.iteritems():
            new_value = validated_data.get(attr, value)
            setattr(instance, attr, new_value)
        instance.save()
        return instance

还在学习Python,所以我不确定我是否在这里做了一些不安全或愚蠢的事情。

- 迪恩

1 个答案:

答案 0 :(得分:1)

如果该字段不是模型字段,则弹出它。否则只需将它放在validated_data dict中。

例如:

def update(self, instance, validated_data):
    not_a_field = validated_data.pop('not_a_field', None)
    # do what you want here
    instance = super().update(instance, validated_data)
    # do what you want here
    return instance

我们弹出非模型字段,以便我们可以调用超级更新方法而不会出现任何错误。