【发布时间】:2018-09-29 12:56:27
【问题描述】:
我在 django rest 框架中自动设置用户时遇到问题。在我的 models.py 中,我有以下内容:
Models.py
class Space(models.Model):
creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
Serializers.py
class SpaceSerializer(serializers.HyperlinkedModelSerializer):
creator = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CreateOnlyDefault(serializers.CurrentUserDefault()))
class Meta:
model = Space
fields = '__all__'
意图是在创建过程中通过 API 设置 creator 字段。当我发出 POST 请求来创建模型时,我收到以下错误:
“/api/space/NOT NULL 约束处的 IntegrityError 失败: apiapp_space.creator_id
我假设序列化程序甚至没有使用此字段覆盖,因为当我在我的模型中设置 null=True 时,它似乎在创建者字段设置为 null 的情况下正确保存。
请注意,我也尝试过使用 serializers.ModelSerializer。
如何让 django 识别此字段覆盖?
【问题讨论】:
-
删除
read_only=True怎么样? -
@JerinPeterGeorge 这似乎已经成功了,但考虑到他们实际上建议在文档中使用它,这似乎很奇怪 - 请参阅 django-rest-framework.org/api-guide/serializers/… 也宁愿不将该字段公开给自动生成的 API 表单,但如果必须,我可以忍受它!
-
去掉
read_only=True后是否有效? -
@JerinPeterGeorge 是的。但是,这允许其他用户根据需要更改此字段,这是不可取的。
-
@我发布了一个答案。请试一试
标签: python django django-models django-forms django-rest-framework