我注意到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,所以我不确定我是否在这里做了一些不安全或愚蠢的事情。
- 迪恩
答案 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
我们弹出非模型字段,以便我们可以调用超级更新方法而不会出现任何错误。