Как использовать обратные отношения в представлениях на основе классов в Django - 2

Я создаю список дел, в котором я хочу, чтобы задачи отображались в соответствующую дату, но мне трудно это сделать.

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

ссылка

Провожу 2-3 дня, застряв на этом. Надеюсь, здесь я смогу получить несколько советов

Желаемый результат

Текущий результат

Мои модели:

class Dailies(models.Model):

    date = models.DateField(auto_now_add=True)

    the_user = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
    )

    def __str__(self):
        return str(self.date)

class DailyTask(models.Model):
    task = models.CharField(max_length=255)
    dailies = models.ForeignKey(
        Dailies,
        on_delete=models.CASCADE
    )

    def __str__(self):
        return self.task

Мой ListView:

class DailiesListView(LoginRequiredMixin, ListView):
    model = Dailies

    template_name = 'home.html'

    context_object_name = 'date'

    ordering = ['-date']

    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        context['date'] = context['date'].filter(the_user=self.request.user)
        context['todos'] = DailyTask.objects.filter(
            dailies__the_user=self.request.user)

        return context

Мой шаблон (home.html):

{% if user.is_authenticated %}
    
    {% for each_date in date %}
    <h3>
        <li>
            {{each_date}}: 
            {% for todo in date.dailies_set.all %}
                <br>
                {{todo}}
            {% endfor %}
        </li>  
    </h3>   
    {% endfor %}

{% else %}
    ...
{% endif %}

В вашем шаблоне {% for todo in date.dailies_set.all %} вы получаете даты из date, который всегда извлекает все даты, но вы должны попытаться получить их из each_date, поэтому ваш код должен быть таким.

{% if user.is_authenticated %}
    
    {% for each_date in date %}
    <h3>
        <li>
            {{each_date}}: 
            {% for todo in each_date.dailies_set.all %}
                <br>
                {{todo}}
            {% endfor %}
        </li>  
    </h3>   
    {% endfor %}

{% else %}
    ...
{% endif %}

Используя {% for todo in each_date.dailytask_set.all %}, я смог правильно выполнить итерацию.

Что я сделал, так это использовал RelatedManager с помощью "_set", и это позволило мне проследить назад к dailytask и итерировать задачи, соответствующие их датам. И это дало мне желаемый результат.

Спасибо @mirodil за помощь!

Вернуться на верх