Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Доступ к элементам словаря в шаблоне [RSS Feed]

#1 Сен. 30, 2010 16:45:46

jingvar
От:
Зарегистрирован: 2010-03-24
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Доступ к элементам словаря в шаблоне

Задача:
1. Есть база-модель в которой хранятся данные о продажах

class Data(models.Model):
upload_id=models.IntegerField()
disty=models.IntegerField()
partnumber=models.IntegerField()
dealer=models.IntegerField()
city=models.IntegerField()
price=models.FloatField()
quantity=models.IntegerField()
date=models.DateField()
2. Нужно отобразить суммы продаж сгруппированные времени, в порядка возрастания времени.

Есть шаблон в который предаются необходимые данные для отображения.

Как это сделать:
а) использовать методы класса для рендеринга - но, не совсем разобрался как там и чего делается, плюс фильтры у меня разные, создавать новые классы или перегружать текущий новыми методами, имхо не совсем правильно, но вы меня поправте если не прав.
б) в лучших традициях питона используем классную штуку словарь:
times=[line['date'] for line in Data.objects.values('date').distinct()] #не очень красиво конечно, пожелания принимаются
sales={}
for line in times:
# тут добывание значений, как сделать select sum(price*quantity) from data where date=line; я не разобрался поэтому вложенный цикл итд
#result помещаем вычисленную сумму за месяц
sales[line]=result
return render_to_response('total_sales_common.html', {sales':sales})
total_sales_common.html
</ul>
<ul>
{% for key,value in sales %}
<li>
{{key}}, {{value}}

</li>
{% endfor %}
</ul>
По сути пример из документации. Он рабочий, но не подходит, т.к. при выводе будут данные вынуты из словаря рандомно.
А хочется банально отсортировать или по дате или по сумме. На сколько я понял django не дает доступ к методам питоновского объекта.

Банальную конструкцию for key in sorted(data.keys()): print key, data в шаблоне не реализуешь.
3) учитывая пункт 2 делаем псевдо словарь в виде списка.
times=[line['date'] for line in Data.objects.values('date').distinct()] #не очень красиво конечно, пожелания принимаются
sales=[]
for line in times:
# тут добывание значений, как сделать select sum(price*quantity) from data where date=line; я не разобрался поэтому вложенный цикл итд
#result помещаем вычисленную сумму за месяц
sales.append([line,reuslt])
return render_to_response('total_sales_common.html', {sales':sales})
total_sales_common.html
</ul>
<ul>
{% for line in sales %}
<li>
{{line.0}}, {{line.1}}

</li>
{% endfor %}
</ul>
Читабельность данного варианта не лучшая, но это рабочий вариант решения задачи отображения массива данных отсортированного по одному из полей.
Или я что не так понял относительно словарей в шаблонах?



Офлайн

  • Начало
  • » Django
  • » Доступ к элементам словаря в шаблоне[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version