Reputation: 99
This is my models.py:
class Category(models.Model):
category_des = models.CharField(max_length=250)
class Type(models.Model):
type_des = models.CharField(max_length=250)
class Product(models.Model):
category_id = models.ForeignKey(Category, on_delete=models.CASCADE)
type_id = models.ForeignKey(Type, on_delete=models.CASCADE)
product_name = models.CharField(max_length=250)
product_price = models.FloatField()
What I want to do is to divide products into menus list and extras list and group them by category like this:
Category 1:
extra 1.a
extra 1.b
menu 1.c
menu 1.d
Category 2:
extra 2.e
extra 2.f
menu 2.g
menu 2.h
and this is what I did in views.py:
class MenuList(generics.ListCreateAPIView):
queryset = models.Product.objects.filter(type_id=1).annotate("category_id")
serializer_class = serializers.ProductSerializer
class MenuDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Product.objects.filter(type_id=1).annotate("category_id")
serializer_class = serializers.ProductSerializer
class ExtraList(generics.ListCreateAPIView):
queryset = models.Product.objects.filter(type_id=2).annotate("category_id")
serializer_class = serializers.ProductSerializer
class ExtraDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Product.objects.filter(type_id=2).annotate("category_id")
serializer_class = serializers.ProductSerializer
I got this error: TypeError: QuerySet.annotate() received non-expression(s): category_id.
Upvotes: 1
Views: 2865
Reputation: 1856
class MenuList(generics.ListCreateAPIView):
queryset = models.Product.objects.filter(type_id=1).annotate(F("category_id"))
serializer_class = serializers.ProductSerializer
Try and make use of an F() object to add on the category_id to each object in your queryset.
Upvotes: 2