2016-11-02 4 views
0

У меня есть эта модель Django:Получить заполнитель в шаблоне

class Location(models.Model): 
    name = models.CharField(primary_key=True, max_length=100) 
    customer = models.OneToOneField(Customer, default=None) 

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

class Order(models.Model): 
    amount = models.PositiveIntegerField(default=0) 
    customer = models.ForeignKey(Customer, default=0) 

на мой взгляд, я их так:

locations = models.Location.objects.all() 

и шаблон перечисляет их следующим образом:

{% for location in locations %} 
    {{ location.customer.name }} 
{% endfor %} 

Я хотел бы добавить сумму всех amount всего Order s подключил этого клиента, поэтому mething как:

{% for location in locations %} 
    {{ location.customer.name }} ordered {{ location.customer.orders.sum(amount) }} items 
{% endfor %} 

И согласно this question, я должен сделать это в представлении, но как?

+0

Er, выполнив [агрегирующие документы] (https://docs.djangoproject.com/en/1.10/topics/db/aggregation/)? Где у вас проблемы? –

+0

@ DanielRoseman Я обновил вопрос с помощью того, что я пробовал, проблема в том, что у меня есть другая модель (ранее я разместил неправильную модель). –

ответ

1

Вы должны использовать .annotate (look in docs):

from django.db.models import Count 

customers = models.Customer.objects.annotate(orders_count=Count('order')) 

Затем в шаблонах вы можете использовать его как это:

{% for customer in customers %} 
    {{ customer.name }} ordered {{ customer.orders_count }} items 
{% endfor %} 
+0

Я заработал. Есть ли способ отфильтровать «порядок»? –

+0

@BartFriederichs дайте пример того, чего вы хотите, пожалуйста – devxplorer

+0

Я только хочу посчитать заказы, которые имеют определенное состояние. –

0

Через некоторое феллинг вокруг я нашел, что это работает:

locations = models.Location.objects.annotate(num_order=Count('customer__order')) 

, а затем использовать его в шаблоне:

{% for location in locations %} 
    {{ location.customer.name }} ordered {{ location.num_order }} items 
{% endfor %} 
Смежные вопросы