Django 在序列化程序上找不到字段
我正在使用DRF构建一个RESTAPI,目前正忙于对端点建模Django 在序列化程序上找不到字段,django,django-rest-framework,Django,Django Rest Framework,我正在使用DRF构建一个RESTAPI,目前正忙于对端点建模/API/v1/victions/1/packages/。对此的GET请求导致以下错误: 属性错误位于/api/v1/VICENCES/1/软件包/ 试图获取序列化程序MenuItemSerializer上的字段item\u type的值时,获取了AttributeError 序列化程序字段的名称可能不正确,并且与ManyRelatedManager实例上的任何属性或键都不匹配 原始异常文本为:“ManyRelatedManager”对
/API/v1/victions/1/packages/
。对此的GET请求导致以下错误:
属性错误位于/api/v1/VICENCES/1/软件包/
试图获取序列化程序MenuItemSerializer
上的字段item\u type
的值时,获取了AttributeError
序列化程序字段的名称可能不正确,并且与ManyRelatedManager
实例上的任何属性或键都不匹配
原始异常文本为:“ManyRelatedManager”对象没有属性“item_type”
以下是参与模型:
class MenuItemType(models.Model):
class Meta:
db_table = 'menu_item_types'
name = models.TextField()
class MenuItem(models.Model):
class Meta:
db_table = 'menu_items'
name = models.TextField()
item_type = models.ForeignKey('MenuItemType', on_delete=models.CASCADE)
class PackageItems(models.Model):
class Meta:
db_table = 'package_items'
package = models.ForeignKey('Package', on_delete=models.CASCADE)
menu_item = models.ForeignKey('MenuItem', on_delete=models.CASCADE)
quantity = models.DecimalField(max_digits=10, decimal_places=2)
comments = models.TextField(null=True)
class Package(models.Model):
class Meta:
db_table = 'packages'
name = models.TextField()
price = models.DecimalField(max_digits=16, decimal_places=2)
comments = models.TextField(null=True)
venue = models.ForeignKey('Venue', on_delete=models.CASCADE)
menu_items = models.ManyToManyField('MenuItem', through='PackageItems')
以及序列化程序:
class MenuItemTypeSerializer(serializers.ModelSerializer):
class Meta:
model = MenuItemType
fields = ['id', 'name']
class MenuItemSerializer(serializers.ModelSerializer):
item_type = MenuItemTypeSerializer()
class Meta:
model = MenuItem
fields = ['id', 'name', 'item_type']
class PackageItemSerializer(serializers.ModelSerializer):
menu_items = MenuItemSerializer()
class Meta:
model = PackageItems
fields = ['id', 'menu_items', 'quantity', 'comments']
class PackageSerializer(serializers.ModelSerializer):
menu_items = MenuItemSerializer()
class Meta:
model = Package
fields = ['id', 'venue_id', 'name', 'price', 'comments', 'menu_items']
让我先承认我是新的Django和DRF,可能犯了一些愚蠢的错误。因此,批评是最受欢迎的 从相关管理器调用时,需要在
MenuItemSerializer
中设置many=True
class PackageSerializer(serializers.ModelSerializer):
menu_items = MenuItemSerializer(many=True)
class Meta:
model = Package
fields = ['id', 'venue_id', 'name', 'price', 'comments', 'menu_items']
成功了!请也解释一下。为什么
many=True
很重要,为什么它的缺失会导致错误。:-)@dotslash调用特殊的many_init
serializer方法来序列化对象列表,而不是单个对象。因此,当您需要表示一个质数集时,您应该使用flagmany=True
。谢谢!现在这就更有意义了。