vvkSeven
@vvkSeven
Junior Python Dev

Фильтр по объектам модели в templates?

Всем привет. Делаю клон trello(борда с задачками), появилась следующая проблема.
Есть модель задачи:
class Task(models.Model):
    article = models.TextField(null=True, blank=True)
    status_choice = models.ForeignKey(Status, on_delete = models.CASCADE, default = 1)

    class Meta:
        verbose_name = 'Задача'
        verbose_name_plural = 'Задачи'

    def __str__(self):
        return self.article

В ней есть поле status_choice который связан с моделью статуса задачи. Модель статуса задачи:
class Status(models.Model): # Модель статуса для задачи
    status = models.CharField(max_length = 20)

    class Meta:
        verbose_name = 'Статус'
        verbose_name_plural = 'Статусы'

    def __str__(self):
        return self.status


В данный момент имею такую картину:
5e5281e5ecf57088062099.png

Вопрос в следующем: Мне нужно создать 5 блоков для каждого статуса, в которых уже будут лежать отфильтрованные по своим статусам задачи, а-ля как на сайте trello:
5e52827c0368f903907477.png

Вот мой темплейт:
{% extends 'base.html' %}
{% block content %}
<style> .card{
    width:250px;
    margin: 5px;
    padding: 5px;
}</style>
  
<div class="card-group d-flex flex-wrap">
   {% for i in tasks %}
    <div class="col-sm-3">
            <div class="card">
                <div class="card-block">
                
                    <h4 class="card-title">{{ i.status_choice }}</h4>
                    <p class="card-text">{{ i.article }}</p>
                    <a href="#" class="btn btn-primary">переместить</a>
                </div>
            </div>
    </div>
    {% endfor %}
</div>

{% endblock %}


Как можно добиться такого результата, как на сайте Trello?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Realmixer
Full stack Python (Django) web-developer
Во-первых, фильтрация — это бизнес-логика. А бизнес-логике не место в шаблонах. Убирайте эту логику в модели, сервисный слой, ну или хотя бы в контроллеры.

Во-вторых, в шаблоне вы просто делаете цикл по всем задачам. В то время как по вашему же описанию вам следует делать цикл по статусам, а внутри него вложенный цикл по задачам каждого статуса:
{% for status in status_list %}
    <h1>{{ status }}</h1>
    {% for task in status.tasks.all %}
        <h2>{{ task }}</h1>        
    {% endfor %}
{% endfor %}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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