我一直在尝试使用带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.
的帮助下我也无法工作答案 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')