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', )
盯着我的代码看了好一会儿,我一直 运行 陷入同样的错误。有趣的是,我为我的模型的另一部分制作了一组类似的序列化程序,并且工作正常。
这是我不断收到的错误:
AttributeError at /onderhoudapi/conditiedeel/.json Got AttributeError when attempting to get a value for field
gebreken
on serializerConditiedeelSerializer
. The serializer field might be named incorrectly and not match any attribute or key on theConditiedeel
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', )