Django无法识别Serializer

时间:2018-04-19 06:19:21

标签: python django django-models django-forms django-rest-framework

我在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识别此字段覆盖?

1 个答案:

答案 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中的一个重大变化,需要允许其他地方的正确行为。 (以前只有默认的只读字段被认为是可写的,默认情况下被用作书面值。最终结果并不是一个好主意。)