В настоящее время я работаю над приложением, которое использует пользовательские аннотированные наборы запросов. В настоящее время у меня настроено 2 URL-адреса, но мне потребуется один для каждого поля, для которого пользователи хотели бы обобщить данные. Это можно настроить вручную, но это нарушит СУХОЙ! Я бы в основном имел + -8 URL, которые в основном делают то же самое.
Итак, вот что я сделал,
- У меня есть созданный пользовательский менеджер моделей
- У меня есть представление
- У меня настроены URL-адреса
Все вышеперечисленные работы.
Таким образом, в основном конфигурация URL передает представлению имя поля для аннотирования (группировать по для людей SQL), представление выполняет некоторую дополнительную обработку и запускает менеджер пользовательских моделей на основе переданного ему поля.
URL выглядит следующим образом:
url('^(?P<field>[\w-]+)/(?P<year>\d{4})/(?P<month>\d+)/(?P<day>\d+)/$','by_subtype', name='chart_link'),
Поле - это столбец в db, который используется, когда фактически выполняется набор запросов. Это передается из вида, мой пользовательский менеджер. Ниже приведен пример кода от менеджера:
return self.filter(start_date_time__year=year).filter(start_date_time__month=month).filter(start_date_time__day=day).values(field).annotate(Count(field))
Кроме того, я передаю значение field в качестве переменной контекста. Это используется для динамического построения ссылок. Однако на самом деле проблема заключается в циклическом просмотре набора запросов и отображении данных.
Ваш типичный код шаблона выглядит следующим образом:
{% for object in object_list %}
{{ object.sub_type }} : {{ object.sub_type__count|intcomma }}
{% endfor %}
В основном вам нужно жестко закодировать поле для diplay (т.е. object.x), есть ли способ динамически назначить это? т.е.
если поле = бизнес
тогда в шаблоне он должен автоматически обработаться:
{{ object.business }}
Можно ли это сделать? Или мне нужно создать несколько URL-адресов? Или есть лучший способ добиться того же результата, динамически обрабатывая запросы с одним представлением и URL.
Вы можете найти код на github, часть шаблона теперь работает с использованием этого фрагмента: http://www.djangosnippets.org/snippets/1412/ Так что, если вы столкнетесь с этим позже и захотите сделать что-то подобное, взгляните на фрагмент кода на github. , : http://gist.github.com/233262