Python Django ORM中获取相关模型计数的有效方法

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

我正在开发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=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')
)