Я работаю над Django 1.10 и PostgreSQL9.6
У меня есть две модели в моем проекте: Order и Customer. Также я использую 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 ...
Теперь мне нужно показать таблицу customers
и показатьколичество ордеров, созданных каждым из них.
Код прямой очереди:
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')
)
Но это дает мне ошибку вроде Cannot resolve keyword 'user.created_orders' into field.
Можете ли вы помочь мне с этим?