django - 在对象中添加 .annotate 外键不会给出明显的结果
问题描述
当我运行以下查询时,它工作正常
query= UserOrder.objects.filter(order_date__range=(
Request['from'], Request['to'])).values('user_id__username','user_id__email').annotate(
total_no_of_order=Count("pk")).annotate(total=Sum('total_cost'))
但我也想知道与订单相关的服务数量
.annotate(total_no_of_services=Count("userorderservice__pk"))
通过在查询中添加上述代码total_no_of_order
并total_cost
进行更改,并distinct=True
仅total_cost
考虑单个唯一total_cost
值
模型.py
class UserOrder(models.Model):
order_id = models.AutoField(primary_key=True)
user_id = models.ForeignKey(AppUser, on_delete=models.CASCADE)
total_cost = models.FloatField()
...
class UserOrderService(models.Model):
order_id = models.ForeignKey(UserOrder, on_delete=models.CASCADE)
...
解决方案
一个UserOrder可以有许多UserOrderService实例。
因此,正确的 COUNT 方法是:
.annotate(total_no_of_services=Count("userorderservice_set"))
请看反向关系
推荐阅读
- html - HTML5 文本区域只接受数字
- javascript - 按ID合并两个对象数组?
- mysql - 在 MySQL 的 GROUP BY 子句中从每个组中查找单行
- python - 遍历字典列表
- javascript - React-Table 加 InfiniteScroll 实现未更新
- php - Laravel 5.8:未找到列:1054 多对多关系中的未知列错误
- linux - 如何使用 Linux 4.20.11 作为 Dom0 在 arm64 和 Qemu 6.0.0 上运行 XEN
- javascript - 更改变量的值并检查该值是否已更改
- python - Flask-SQLAlchemy 多重关系问题
- javascript - 如何使用布局文件夹在 nuxt 应用程序中应用布局?