django - Django通过外键注释
问题描述
这是我的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()
我想要做的是将产品分为菜单列表和附加列表,并按类别对它们进行分组,如下所示:
第一类:
额外的 1.a
额外1.b
菜单 1.c
菜单 1.d
第 2 类:
额外的 2.e
额外的 2.f
菜单 2.g
菜单 2.h
这就是我在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
我收到了这个错误:TypeError: QuerySet.annotate() received non-expression(s): category_id.
解决方案
查询表达式和 F() 对象
class MenuList(generics.ListCreateAPIView):
queryset = models.Product.objects.filter(type_id=1).annotate(F("category_id"))
serializer_class = serializers.ProductSerializer
尝试使用 F() 对象将 category_id 添加到查询集中的每个对象。
推荐阅读
- algorithm - 每项工作需要多人的分配问题
- javascript - 弹出关闭按钮不关闭弹出
- powerbi - 如何在没有第三方软件的情况下将 Apache Druid 连接到 Power BI?
- c++ - C++中的TRIE数据结构实现
- javascript - 如何在模板中将 Django 查询集呈现为 javascript?
- java - 映射到许多值
- list - Scala:为列表中的匿名对象分配名称
- flutter - Flutter 未来的 json 列表定义为 final 并停止更新它
- javascript - Chart.js:如何更改任何尺寸的 x 轴刻度标签对齐方式?
- ios - 我应该不在 viewDidLoad 中使用 UIButton 的 addTarget