Получите доступ к 'values_list' набора запросов в шаблоне Django - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь получить доступ к 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 только переменной timepoint.

Текущий шаблон:

<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>

1 Ответ

0 голосов
/ 20 ноября 2018

Хотя этот вид логики больше подходит для представлений, для этого можно использовать пользовательский тег шаблона . Что-то вроде ниже.

# 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 %} ...



....
...