Джанго сортировка без дубликатов - PullRequest
0 голосов
/ 24 сентября 2018

Структура модели на скриншоте.Мне нужна структура в шаблоне, как на экране.

экран

в поле зрения я получаю объект:

class ArticleDetailView(DetailView):
        model = Article
        template_name = 'info_detail.html'

    def get_context_data(self, *args, **kwargs):
    context = super(ArticleDetailView, self).get_context_data(*args, **kwargs)
    context['article'] = self.get_object()
    return context 

Модель

class Article(models.Model):
        news = models.ManyToManyField(News)

class News(models.Model):
          type = models.ForeignKey(Type)
          title = models.CharField(max_length=100)

class Type(models.Model):
          name = models.CharField(max_length=100)

Шаблон:

{% for news in article.news.all %}
   <p>{{ news.type.name }}</p>
    <p>{{ news.title }}</p>
{% endfor %}

Если в шаблоне я использую цикл for-> у меня такая структура: type1: news 1;тип1: новости 2; тип 2: новости 3.

1 Ответ

0 голосов
/ 25 сентября 2018

Добавьте порядок по умолчанию для вашего News класса:

class News(models.Model):

    (...)
    class Meta:
        ordering = ['type', 'title']

Затем в цикле вашего шаблона:

{% for news in article.news.all %}
    {% ifchanged news.type %}
        {% if forloop.counter != 1 %}</ul>{% endif %}
        <h2>{{ news.type.name }}</h2>
        <ul>
    {% endifchanged %}
    <li>
        {{ news.title }}
    </li>
 {% endfor %}
 </ul>

Поскольку объекты News упорядочены по type, он будет добавлять заголовок каждый раз, когда встречается новый type.

...