【问题标题】:Django Rest framework keeps returning error on nested relationshipDjango Rest框架在嵌套关系上不断返回错误
【发布时间】:2015-04-16 10:22:30
【问题描述】:

盯着我的代码看了很长一段时间,我一直遇到同样的错误。有趣的是,我为我的模型的另一部分制作了一组类似的序列化程序,并且工作正常。

这是我不断收到的错误:

AttributeError at /onderhoudapi/conditiedeel/.json 得到 AttributeError 尝试在序列化程序上获取字段 gebreken 的值时 ConditiedeelSerializer。序列化器字段可能被命名 不正确且不匹配 Conditiedeel 上的任何属性或键 实例。原始异常文本是:“Conditiedeel”对象没有 属性“gebreken”。

序列化器.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 类与 Conditiedeel 类有外来关系。这应该意味着我可以使用像here 这样的嵌套关系。我想我密切关注了这个例子,但我无法让它发挥作用。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

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

    class ConditiedeelSerializer(serializers.ModelSerializer):
        gebrek_set = GebrekSerializer(many=True, read_only=True)
    
        class Meta:
            model = Conditiedeel
            fields = ('deel', 'conditiescore', 'gebrek_set', )
    

    【讨论】:

    • 这确实有效。很困惑,因为文档使用“tracks”而不是“track_set”..
    • 请将您的答案从“gebreken_set”更新为“gebrek_set”。这样我也可以再次投票。
    • 我非常相信您的回答不会解决问题。老实说,我仍然不太明白它为什么起作用,或者更确切地说,为什么我以前的解决方案不起作用。我很清楚普通 Django 数据库 api 中的 _set 模式,但其余框架似乎并不依赖它。文档和我之前的代码都不依赖 _set 作为外键。
    • @RoyPrins 在这里阅读Reverse relations 他们提到 _set 前缀以获得反向关系,这就是你的情况。
    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 2017-06-28
    • 2018-02-10
    • 2016-05-30
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多