更新嵌套序列化程序时的 Django 休息框架验证(许多=真)

Ron*_*hen 7 django serialization django-rest-framework

我有以下型号:

class Child(models.Model):
    attr1 = models.CharField(max_length=20)
    attr2 = models.CharField(max_length=30)
    attr3 = models.BigIntegerField()

    class Meta:
        unique_together = ("attr1", "attr2", "attr3")

class Parent(models.Model):
    children = models.ManyToManyField(Child, related_name="parents")
Run Code Online (Sandbox Code Playgroud)

然后是以下序列化程序:

class ChildSerializer(serializers.ModelSerializer):
    class Meta:
        model = Child

class ParentSerializer(serializers.ModelSerializer):
    children = ChildSerializer(many=True)
    class Meta:
        model = Parent
Run Code Online (Sandbox Code Playgroud)

使用嵌套的 (many=True) 子序列化程序更新父实例时,出现验证错误:

The fields attr1, attr2, attr3 must make a unique set.
Run Code Online (Sandbox Code Playgroud)

但是,序列化程序不应该跳过对孩子的验证,因为他们已经从数据库中检索了实例吗?

See*_*u S 0

Nested Serializers对我有用many=true。这是我的代码:

class ChildSerializer(serializers.ModelSerializer):
    parents = ChildSerializer(many=True)

    class Meta:
        model = Child
        fields = ('id', 'parents')

class ParentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Parent
Run Code Online (Sandbox Code Playgroud)

父模型中有子字段。在序列化器中,您尝试在其中添加相同的字段。因此,它说字段需要是唯一的。

  • 这不适用于唯一的共同约束。请再读一遍问题。 (2认同)