Как мне получить что-то вроде постоянных клиентов в Джанго - PullRequest
1 голос
/ 17 ноября 2009

Мои модели выглядят примерно так:

class Customer(models.Model):
   name = models.CharField(max_length=100)

class Order(models.Model):
   customer = models.ForeignKey(Customer)
   date = models.DateField()
   total = models.DecimalField(max_digits=5, decimal_places=2)

У меня тогда есть набор запросов:

from datetime import datetime

start_date = datetime(year=2009, month=6, day=1)
end_date = datetime(year=2009, month=11, day=1)
orders = Order.objects.filter(date__lte=end_date).filter(date__gte=start_date)

Теперь я хочу выяснить, какие клиенты сделали несколько заказов между этими временами, сколько заказов они сделали и какова их средняя сумма. У меня такое чувство, что мне следует использовать новые функции агрегирования Django 1.1, но я не могу по-настоящему обдумать это.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2009

Всегда основывайте свой запрос на объекте, который вас интересует в первую очередь:

repeat_customers = Customer.objects.annotate(order_count=Count('order'))\
                                   .filter(order_count__gt=1)

Тогда, если вы хотите аннотировать их итоги (вы могли бы сделать это в аннотации выше, я просто разделяю код для удобства чтения):

repeat_customers = repeat_customers.annotate(avg_total=Avg('order__total'))
0 голосов
/ 17 ноября 2009

Это было бы неплохо для функциональности annotate() Django 1.1, которая является частью aggregateion . В частности, вы, вероятно, захотите использовать функцию values().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...