代码之家  ›  专栏  ›  技术社区  ›  aleksk

Django无法识别序列化程序中当前用户的字段重写

  •  1
  • aleksk  · 技术社区  · 6 年前

    我在django rest框架中自动设置用户时遇到了一个问题。在我的模型中。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创建期间设置creator字段。当我发出POST请求以创建模型时,我得到以下错误:

    “IntegrityError at/api/space/NOT NULL约束失败: apiapp\u空间。creator\u id

    我假设序列化程序甚至没有使用此字段重写,因为当我在模型中设置null=True时,它似乎在创建者字段设置为null的情况下正确保存。

    注意,我也尝试过使用序列化程序。ModelSerializer。

    如何让django识别此字段重写?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Carlton Gibson    6 年前

    这包括在 the release notes for v3.8

    对于只读字段,调用save时需要传递值:

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

    这个 CreateOnlyDefault 用作 unique_together 模型验证。

    这是v3中一个突破性的变化。8,要求允许在其他地方正确行为。(以前带有默认值的只读字段被认为是可写的,默认值被用作写入值。最终证明这不是一个好主意。)