2009-04-30 2 views
2

Я хотел бы создать пятерку лучших продавцов продуктов в каждом месяце.о annotate django

Я слышал, что аннотации должны использоваться для этого случая, но я не знаю, как его использовать.

Будете ли вы любезны, чтобы помочь мне?

+0

Дайте нам свой текущий код. Если у вас его нет, то, скорее всего, вы ответите на свой вопрос в процессе его написания. – AdamKG

ответ

7

Вам необходимо предоставить гораздо больше информации, прежде чем кто-либо сможет предоставить вам полезный ответ. Опишите, что вы знаете, что вы пробовали, подробно расскажите о том, чего вы надеетесь достичь.

В то же время, вы можете узнать о функции annotate() django и посмотреть несколько примеров, прочитав aggregation documentation для django.

5

аннотация не является единственным способом сделать это. Вы также можете использовать агрегацию extra, хотя она может быть не очень эффективной, и это будет основываться на sql, специфичном для вашей базы данных. Этот подход не будет работать в App Engine, но должен быть в SQL-совместимой базе данных.

Например, скажем, вы имели Product модель и SalesOrder модель, где SalesOrder модель имеет позицию для каждого product_idorder_date и в нем.

top_products = Product.objects.extra( 
    select={'num_orders':'select count(product_id) from app_product where app_salesorder.order_date > thirty_days_ago and app_product.id = app_salesorder.product_id'}) 
     .order_by('-num_orders')[:5]