我正在尝试访问模板中query_set的values_list
。
在一种观点中,我使用以下if语句来确定给定的Outcome
(模型)是否存在Participant
(模型):
if not form.cleaned_data['timepoint'] in patient.outcome_set.values_list('timepoint', flat=True):
这很好用-现在我希望能够与模板中的values_list
做类似的事情。但是,当我尝试将values_list
限制为模型上的timepoint
变量时,它将引发TemplateSyntaxError
Could not parse the remainder: '('template')' from 'patient.outcome_set.values_list('template')'
如果我使用values_list
将{{ patient.outcome_set.values_list }}
打印到屏幕上,则会很好地打印每个结果的所有值,但是我不知道如何将values_list限制为仅时间点变量。 / p>
当前模板:
<table>
<thead>
<tr>
<th>Patient</th>
<th>Baseline</th>
<th>Follow-up</th>
</tr>
</thead>
<tbody>
{% for patient in patients %}
<tr>
<td>{{ patient.name }}</td>
{% if 'baseline' in patient.outcome_set.values_list('timepoint') %}
<td>INSERT TICK</td>
{% else %}
<td>INSERT CROSS</td>
{% endif %}
{% if 'followup' in patient.outcome_set.values_list('timepoint') %}
<td>INSERT TICK</td>
{% else %}
<td>INSERT CROSS</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
答案 0 :(得分:1)
尽管这种逻辑更适合视图,但您可以为此使用custom template tag。像下面这样。
# extra_tags.py
@register.filter
def get_value_in_qs(queryset, key):
return queryset.values(key, flat=True)
然后您可以通过以下方式在模板中使用它:
{% load extra_tags %}
...
{% for patient in patients %}
<tr>
<td>{{ patient.name }}</td>
{% if 'baseline' in patient.outcome_set|get_value_in_qs:'timepoint' %}
# or for better readability use a with tag
{% with patient_timepoint=patient.outcome_set|get_value_in_qs:'timepoint' %}
{% if 'baseline' in patient_timepoint %} ...
....