Django Templates - Печать Разделенного от запятой ManyToManyField, сортировка списка результатов в dict?

У меня есть проект Django для управления списком статей в журнале. Основная модель Article. Это имеет различные поля для хранения вещей как заголовок статьи, года издания, предмета, а также списка компаний, упомянутых в статье. (company своя собственная модель).

Я хочу шаблон, который распечатывает список статей, отсортированных по категориям, и также список упомянутых компаний.

Однако я поражаю две проблемы.

Во-первых, company поле является полем ManyToMany. Я печатаю это успешно теперь, с помощью all повторяемый, благодаря этому ТАК вопрос =). (Любопытный, хотя, где это all повторяемый зарегистрированный в документацию Django?)

список объектов от ManyToManyField

Однако я хотел бы распечатать", "(запятая, сопровождаемая пространством) после каждого объекта, кроме последнего объекта. Таким образом, вывод был бы:

Joe Bob Company, Sarah Jane Company, Tool Company

и нет:

Joe Bob Company, Sarah Jane Company, Tool Company,

Как Вы достигаете этого с системой шаблонной обработки Django?

Во-вторых, каждый Article имеет CharField, названный category, это хранит категорию для статьи. Я хотел бы статьи, отсортированные по Категориям, если это возможно. Таким образом, я использую QuerySet и получаю хороший список соответствующих статей в article_list. Я затем использую regroup тег шаблона, чтобы отсортировать это в категории и распечатать каждого.

{ 'tennis': ('article_4', 'article_5')
  'cricket': ('article_2', 'article_3')
  'ping pong': ('article_1')
}

Однако я должен удостовериться, что мой входной список отсортирован, прежде чем я передам его regroup. Мой вопрос, это лучше для использования dictsort тег шаблона для сортировки этой внутренней части шаблон, или если я использую QuerySet order_by звонить вместо этого?

И я предполагаю, что лучше использовать regroup, вместо того, чтобы пытаться кодировать это самостоятельно в Python в представлении?

С наилучшими пожеланиями, Victor

8
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

первый вопрос

Используйте фильтр соединения типа python

{{ article.company.all|join:", " }}

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#join

второй вопрос

Мой вопрос , лучше использовать тег шаблона dictsort для сортировки этого внутри шаблона, или мне следует использовать Вместо этого вызов QuerySet order_by?

Я бы использовал order_by QuerySet. Мне нравится делать такие вещи в БД. Благодаря огромному набору данных вы можете использовать индексы базы данных.

И я считаю, что лучше использовать перегруппировку, чем пытаться кодировать это я на Python внутри представления?

перегруппироваться. Определенно лучше использовать собственные функции Python.

17
ответ дан 5 December 2019 в 05:18
поделиться

Попробуйте использовать forloop.last для своего первого вопроса

{% for company in article.companys.all %}
  {{company.name}}{% if not forloop.last %}, {% endif %}
{% endfor %}
15
ответ дан 5 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: