Использование нескольких полей модели для перегруппировки списка в шаблоне Django - PullRequest
1 голос
/ 08 января 2012

Я использую тег regroup в шаблоне Django для отображения списка элементов, сгруппированных по Customer. Моя модель:

class Customer(models.Model):
  name = models.CharField(max_length=25)
  city = models.CharField(max_length=25)

Я могу перечислить элементы customer.name (или customer.city), по сути, я хочу заказать их как «Имя, Город». Согласно документации «Любой действительный поиск шаблона является допустимым атрибутом группировки для тега regroup, включая методы, атрибуты, ключи словаря и элементы списка». [1] Как мне определить метод для этого? И как я могу назвать это из моего шаблона?

[1] https://docs.djangoproject.com/en/dev/ref/templates/builtins/

Обновление: Поскольку я понимаю функциональность перегруппировки и использую ее сейчас, я группирую список, используя одно из полей объекта. Разделитель customer.grouper отображает имя этого конкретного поля. В моем случае «customer.name» или «customer.city». Моя цель - представить это вместе, например, «customer.name, customer.city» (то есть «Microsoft, Redmond»). В документации это кратко упоминается, но я не могу понять это.

def display_name(self):
  return "%s, %s" (self.name, self.city)

Я пытался описать вышеописанный метод, как часть моей модели Customer, чтобы исправить мою проблему. Но я не уверен, как это вызвать из моего шаблона.

1 Ответ

2 голосов
/ 08 января 2012

Функция вашей модели правильная, но она должна содержать % перед фигурными скобками:

def display_name(self):
  return "%s, %s" %(self.name, self.city)

Ваше представление должно передавать список объектов, а не значений.

Позволить спискубыть tp, поэтому код вашего шаблона должен выглядеть примерно так:

{% regroup tp by display_name as tp_list %}

<ul>
{% for t in tp_list %}
    <li>{{ t.grouper }}
    <ul>
        {% for item in t.list %}
            <...something of your code....>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>

Это должно сработать для вас достаточно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...