【发布时间】:2018-10-19 13:42:07
【问题描述】:
鉴于PATCH 请求下方的序列化程序与{'description': 'product_3'} 不包括user 在验证数据中。
如何在不调用.save(updated_by=request.user) 的情况下将CurrentUserDefault() 添加到经过验证的数据中?
class MySerializer(serializer.ModelSerializer):
user = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = Model
fields = ('id', 'user', 'description')
def create(self, validated_data):
validated_data['created_by'] = validated_data.pop('user')
return super().create(validated_data)
def update(self, instance, validated_data):
validated_data['updated_by'] = validated_data.pop('user')
return super().create(instance, validated_data)
【问题讨论】:
-
我认为您的代码中存在安全问题,因为我认为您从请求中获取当前用户(用户可以简单地更改表单并像其他用户一样提交数据)请注意当前用户已经在
self.context['request'].user您不需要从用户提交的数据中获取它 -
我刚刚测试了它,即使用户提交了带有
user的请求,它也会被忽略并且对象与真正的当前用户一起保存。
标签: django django-rest-framework