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

时间:2016-01-31 15:39:57

标签: django django-rest-framework

我一直在尝试使用带DRF的嵌套序列化程序,但它不会在输出中显示相关项目。

这是我的index()

package main

import "fmt"

type Foo interface {
   printFoo()
}

type FooImpl struct {

}

type Bar struct {
   FooImpl
}

type Bar2 struct {
   FooImpl
}

func (f FooImpl)printFoo(){
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
   return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}

和我的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

但它给出了错误:

  

AttributeError:尝试获取值时获得AttributeError   序列化程序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 。序列化器   字段可能命名不正确,并且不匹配任何属性或键   items实例。原始例外文本是:'分类'   对象没有属性'items'。

我一直在寻找一段时间,但即使在the doc.

的帮助下我也无法工作

1 个答案:

答案 0 :(得分:8)

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

EITHER:将related_name添加到您的外键。

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

OR:另一种解决方案是更改CategorieSerializer

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