簡體   English   中英

嵌套的串行器與Django-Rest-Framework

[英]Nested serializer with Django-Rest-Framework

我一直在嘗試使用帶DRF的嵌套序列化程序,但它不會在輸出中顯示相關項。

這是我的model.py

class Categorie(models.Model):
    nom = models.CharField(max_length=100)

    def __unicode__(self):
        return unicode(self.nom)

class Item(models.Model):
    nom = models.CharField(max_length=100)
    disponible_a_la_vente = models.BooleanField(default = True)
    nombre = models.IntegerField()
    prix = models.DecimalField(max_digits=5, decimal_places=2)
    history = HistoricalRecords()

    categorie = models.ForeignKey(Categorie, models.CASCADE)


    class Meta:
        verbose_name = "item"
        verbose_name_plural = u"inventaire"

        ordering = ['categorie', 'nom']

    def __unicode__(self):
        return u'{nom} - {nombre}'.format(nom = self.nom, nombre = self.nombre)

和我的serializers.py

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ('nom',)

class CategorieSerializer(serializers.ModelSerializer):
    items = ItemSerializer(many=True)

    class Meta:
        model = Categorie
        fields = ('nom', 'id', 'items')

我目前正在測試的視圖非常基礎:

class InventaireDetail(generics.RetrieveAPIView):
    queryset = Categorie.objects.all()
    serializer_class = CategorieSerializer

但它給出了錯誤:

AttributeError:嘗試在序列化程序CategorieSerializer上獲取字段items的值時獲得AttributeError。 序列化程序字段可能名稱不正確,並且與Categorie實例上的任何屬性或鍵都不匹配。 原始異常文本是:'Categorie'對象沒有屬性'items'。

我一直在尋找一段時間,但即使在文檔的幫助下我也無法使它工作

Categorie.items不存在。 默認情況下,反向關系將獲得名稱Categorie.item_set 您可以通過兩種方式解決這個問題。

EITHER:將related_name添加到您的外鍵。

class Item(models.Model):
    categorie = models.ForeignKey(Categorie, models.CASCADE, related_name='items')

或者:另一種解決方案是更改CategorieSerializer

class CategorieSerializer(serializers.ModelSerializer):
    items = ItemSerializer(many = True, read_only=True, source='item_set')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM