Django Rest 框架在嵌套关系上不断返回错误

Django Rest framework keeps returning error on nested relationship

盯着我的代码看了好一会儿,我一直 运行 陷入同样的​​错误。有趣的是,我为我的模型的另一部分制作了一组类似的序列化程序,并且工作正常。

这是我不断收到的错误:

AttributeError at /onderhoudapi/conditiedeel/.json Got AttributeError when attempting to get a value for field gebreken on serializer ConditiedeelSerializer. The serializer field might be named incorrectly and not match any attribute or key on the Conditiedeel instance. Original exception text was: 'Conditiedeel' object has no attribute 'gebreken'.

serializers.py

class GebrekSerializer(serializers.ModelSerializer):
    class Meta:
        model = Gebrek
        fields = ('naam', 'get_type', 'get_omvang_waarde', 'get_intensiteit_waarde', 'get_ernst_waarde')


class ConditiedeelSerializer(serializers.ModelSerializer):
    gebreken = GebrekSerializer(many=True, read_only=True)

    class Meta:
        model = Conditiedeel
        fields = ('deel', 'conditiescore', 'gebreken', )

models.py

class Conditiedeel(models.Model):
    deel = models.OneToOneField(Deel, null=True, blank=True)
    conditiegroep = models.ForeignKey(Conditiegroep)
    conditiescore = models.IntegerField(choices=CONDITIE_KEUZES)

    #some class methods here


class Gebrek(models.Model):
    naam = models.CharField(max_length=80)
    omvang = models.IntegerField(choices=OMVANG_KEUZES)
    intensiteit = models.IntegerField(choices=INTENSITEIT_KEUZES)
    conditiedeel = models.ForeignKey(Conditiedeel)
    nengebrek = models.ForeignKey(Nengebrek)

    #class methods here

如您所见,Gebrek class 与 Conditiedeel class 有外来关系。那应该意味着我可以使用像 here 这样的嵌套关系。我想我严格按照这个例子做了,但我无法让它工作。

这里的问题是 Conditiedeel 模型没有名为 gebreken 的属性,请记住您正在尝试获取向后关系对象,因此您需要使用 gebreken_set 作为字段正如 django docs 所说。所以你的序列化器应该是

class ConditiedeelSerializer(serializers.ModelSerializer):
    gebrek_set = GebrekSerializer(many=True, read_only=True)

    class Meta:
        model = Conditiedeel
        fields = ('deel', 'conditiescore', 'gebrek_set', )