gpt4 book ai didi

django - 带有 Django-Rest-Framework 的嵌套序列化器

转载 作者:行者123 更新时间:2023-12-04 23:18:03 30 4
gpt4 key购买 nike

我一直在尝试使用带有 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')

我目前正在测试的 View 非常基本:
class InventaireDetail(generics.RetrieveAPIView):
queryset = Categorie.objects.all()
serializer_class = CategorieSerializer

但它给出了错误:

AttributeError: Got AttributeError when attempting to get a value for field items on serializer CategorieSerializer. The serializer field might be named incorrectly and not match any attribute or key on the Categorie instance. Original exception text was: 'Categorie' object has no attribute 'items'.



我一直在寻找一段时间,但即使在 the doc. 的帮助下我也无法让它工作

最佳答案

Categorie.items不存在。默认情况下,反向关系将获得名称 Categorie.item_set .您可以通过两种方式解决该问题。

要么:添加 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')

关于django - 带有 Django-Rest-Framework 的嵌套序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115677/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com