Luk*_*pan 1 django django-rest-framework
我有一个简单的文件Model,用于存储使用创建它的用户ForeignKey。该模型有一个对应的ModelSerializer和ModelViewSet。
问题在于,当用户提交POST创建新记录时,user应该由后端设置。我试图压倒一切perform_create的ModelViewSet设置用户,但它实际上在验证步骤仍然失败(这是有道理的)。回来说user必须填写该字段。
我正在考虑将user字段覆盖ModelSerializer为可选字段,但我觉得可能存在更清洁,更有效的方法。有任何想法吗?
您可以将该user字段设置为read_only.
这将确保在序列化表示时使用该字段,但在反序列化期间创建或更新实例时不使用该字段。
在序列化器中,您可以执行以下操作:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
extra_kwargs = {
'user' : {'read_only' : True} # define the 'user' field as 'read-only'
}
Run Code Online (Sandbox Code Playgroud)
然后您可以覆盖并根据您的要求perform_create()进行设置。user
我在寻找一种在控件进入验证器之前更新值的方法时遇到了这个答案。
这可能对其他人很有用-这是我最终如何做(DRF 3),而无需重写整个验证器。
class MyModelSerializer(serializers.ModelSerializer):
def to_internal_value(self, data):
data['user'] = '<Set Value Here>'
return super(MyModelSerializer, self).to_internal_value(data)
Run Code Online (Sandbox Code Playgroud)
对于那些好奇的人,我使用它将十进制值四舍五入到模型中定义的精度,以使验证器不会抛出错误。
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |