Reputation: 5417
I'm building a REST API using DRF, and am currently stuck with modeling the endpoint /api/v1/venues/1/packages/
. A GET request on this is giving me this error:
AttributeError at /api/v1/venues/1/packages/
Got AttributeError when attempting to get a value for field
item_type
on serializerMenuItemSerializer
.The serializer field might be named incorrectly and not match any attribute or key on the
ManyRelatedManager
instance.Original exception text was: 'ManyRelatedManager' object has no attribute 'item_type'.
Here are the participating models:
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')
and the serializers:
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']
Let me admit up-front that I'm new Django and DRF and might be making some stupid mistake. Criticism, therefore, is most welcome!
Upvotes: 1
Views: 1116
Reputation: 8907
Your need to set many=True
in a MenuItemSerializer
when you call it from related manager
class PackageSerializer(serializers.ModelSerializer):
menu_items = MenuItemSerializer(many=True)
class Meta:
model = Package
fields = ['id', 'venue_id', 'name', 'price', 'comments', 'menu_items']
Upvotes: 1