Python Django ORM中获取相关模型计数的有效方法
我正在开发Django 1.10和PostgreSQL9.6 我的项目中有两个模型:订单和客户。我还使用Django的Python Django ORM中获取相关模型计数的有效方法,python,django,postgresql,orm,Python,Django,Postgresql,Orm,我正在开发Django 1.10和PostgreSQL9.6 我的项目中有两个模型:订单和客户。我还使用Django的auth.User存储登录凭据 这是一个被截取的代码: from django.contrib.auth.models import User from django.db import models class Order(models.Model): created_by = models.ForeignKey(User, null=True, on_delete
auth.User
存储登录凭据
这是一个被截取的代码:
from django.contrib.auth.models import User
from django.db import models
class Order(models.Model):
created_by = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, related_name='created_orders')
# ... other fields ...
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# ... other fields ...
现在,我需要显示一个客户表
,并显示每个客户创建的订单数量
直接前进代码为:
for customer in Customer.objects.all():
print(customer.user.created_orders.count())
现在,我需要避免N+1问题,并让Django使用固定数量的查询获取所有数据
我试着写一些东西,比如:
query = Customer.objects.select_related('user').annotate(
orders_count=Count('user.created_orders')
)
但这给了我一个错误,比如无法将关键字“user.created\u orders”解析到字段中。
你能帮我吗 此处不应使用点(
),而应使用两个连续的下划线():
query=Customer.objects.选择相关('user')。注释(
订单数量=计数(“用户创建的订单”)
)
请注意,您不需要。选择_related('user')
以注释查询集。但是,如果您计划在以后的逻辑中使用.user
,它确实可以提高性能。我接近这一点,但使用了select\u related:D中的用户创建的订单。Thankyou@atomAltera:嗯,我确实认为这是某种“大脑冻结”,因为其余的问题确实非常接近:)。
query = Customer.objects.select_related('user').annotate(
orders_count=Count('user__created_orders')
)