Есть ли способ как-то предварительно выбрать данные в наборе запросов, прежде чем они перейдут в шаблоны? Это модели «проекта», которые подключаются к «project_phase», и есть записи «project_phase_history», которые отслеживают все изменения статуса.
Я строю отчеты на основе этих данных и показываю все их проекты на одной странице и хочу отображать только project_phase_history, которые были отправлены за последние несколько дней ИЛИ один из последних.
Я пытался сделать это в представлении как-то так:
projects_to_report_on = project.objects.filter(Q(current_phase__phase__id__in=[1,2,3,4]) & Q(role_sponsor__id = sponsor_id))
projects_to_report_on.current_phase.project_phase_history_set = projects_to_report_on.current_phase.project_phase_history.filter(...)
но на самом деле это не помогает - кажется, все данные попадают в шаблон.
В итоге я передал дату в шаблон и сгенерировал отчет примерно так:
{% for s in p.current_phase.project_phase_history_set.all %}
{% if s.date_submitted >= status_start_date %}
<tr>
<td>{{ s.date_submitted }}</td>
<td>{{ s.date_end_fact|default_if_none:"-" }}</td>
</tr>
{% endif %}
{% endfor %}
но у него нет той гибкости, которую я ищу.
class project(models.Model):
name = models.CharField(max_length=100, null=False, unique=True)
description = models.CharField(max_length=1024,null=True,blank=True)
current_phase = models.ForeignKey('project_phase', null=True, blank=True, related_name="current_phase")
class project_phase(models.Model):
phase = models.ForeignKey('phases')
project = models.ForeignKey('project')
is_finished = models.BooleanField(default=False)
class project_phase_history(models.Model):
project_phase = models.ForeignKey('project_phase')
date_start_plan = models.DateField(null=True, blank=False)
date_start_fact = models.DateField(null=True, blank=True)