我在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在创建过程中设置创建者字段。当我发出POST请求来创建模型时,我收到以下错误:
" / api / space / NOT NULL约束中的IntegrityError失败: apiapp_space.creator_id
我假设序列化程序甚至没有使用此字段覆盖,因为当我在模型中设置null = True时,它似乎正确保存,并将creator字段设置为null。
请注意,我也尝试过使用serializers.ModelSerializer。
如何让django识别此字段覆盖?
答案 0 :(得分:1)
the release notes for v3.8中介绍了这一点。
对于只读字段,您需要在调用save时传递值:
def perform_create(self, serializer):
serializer.save(creator=self.request.user)
CreateOnlyDefault
用作模型上unique_together
验证的值。
这是v3.8中的一个重大变化,需要允许其他地方的正确行为。 (以前只有默认的只读字段被认为是可写的,默认情况下被用作书面值。最终结果并不是一个好主意。)