python - DRF 只读字段仍然有效
问题描述
我有一个我希望始终成为用户的领域。我的序列化器是这样的:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
read_only_fields = ('user',)
def perform_save(self, serializer):
serializer.save(user=self.request.user)
class MyModel(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
...
但它给了我错误NOT NULL constraint failed: app_my_model.user_id
,但该字段是只读的......我不明白。
解决方案
首先,没有perform_save()
为序列化程序命名的方法,它是为viewset
类命名的。这可能是问题
使用如下save()
方法
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
read_only_fields = ('user',)
def save(self, **kwargs):
kwargs['user'] = self.context['request'].user
return super().save(**kwargs)
推荐阅读
- java - 对话框显示 - 它不适合屏幕,我无法将对话框移动到屏幕上的其余消息
- tuples - 固定大小的非同质元组
- c# - 如何从另一个类c#中获取textboxt的文本
- react-native - 如何从 React-Native 中的渲染中获取 var/const
- reporting-services - SSRS 使用默认日期报告部署
- opengl - GLSL 中的平面反射
- sql - 使用自加入更新
- reporting-services - 从水晶报告翻译的 ssrs 中的上一个/下一个表达式
- perl - Perl - 模板合金和模板工具包数组参考
- c# - asp.net 团队项目显示缺少程序集引用和其他错误