Django 在序列化程序上找不到字段

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”对

我正在使用DRF构建一个RESTAPI,目前正忙于对端点建模
/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方法来序列化对象列表,而不是单个对象。因此,当您需要表示一个质数集时,您应该使用flag
many=True
。谢谢!现在这就更有意义了。