gpt4 book ai didi

python - Django 无法识别序列化器中当前用户的字段覆盖

转载 作者:行者123 更新时间:2023-12-01 09:31:40 27 4
gpt4 key购买 nike

我在 django Rest 框架中自动设置用户时遇到问题。在我的 models.py 中,我有以下内容:

模型.py

class Space(models.Model):
creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

序列化器.py

class SpaceSerializer(serializers.HyperlinkedModelSerializer):
creator = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CreateOnlyDefault(serializers.CurrentUserDefault()))

class Meta:
model = Space
fields = '__all__'

目的是创建者字段将在创建过程中通过 API 设置。当我发出 POST 请求来创建模型时,出现以下错误:

"IntegrityError at /api/space/ NOT NULL constraint failed: apiapp_space.creator_id

我假设序列化器甚至没有使用此字段覆盖,因为当我在模型中设置 null=True 时,它​​似乎可以正确保存,并将创建者字段设置为 null。

请注意,我也尝试过使用serializers.ModelSerializer。

如何让 django 识别此字段覆盖?

最佳答案

这在 the release notes for v3.8 中有介绍。 。

对于只读字段,您需要在调用保存时传递值:

def perform_create(self, serializer):
serializer.save(creator=self.request.user)

CreateOnlyDefault 用作模型上 unique_together 验证的值。

这是 v3.8 中的一项重大更改,需要在其他地方允许正确的行为。 (以前具有默认值的只读字段被认为是可写的,默认值被用作写入值。最终证明这不是一个好主意。)

关于python - Django 无法识别序列化器中当前用户的字段覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49913996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com