аннотировать не единственный способ сделать это. Вы также можете использовать агрегацию extra
, хотя это может быть не очень эффективно, и это будет зависеть от sql, специфичного для вашей базы данных. Этот подход не будет работать в App Engine, но должен работать в SQL-совместимой базе данных.
Например, скажем, у вас была модель Product
и модель SalesOrder
, где модель SalesOrder
имеет позицию для каждого product_id
и order_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]