Access a queryset's 'values_list' in Django template
I am trying to access the values_list
of a query_set in a template.
In a view I have used the following if statement to determine whether an Outcome
(model) exists for a given Participant
(model):
if not form.cleaned_data['timepoint'] in patient.outcome_set.values_list('timepoint', flat=True):
This worked perfectly - now I want to be able to do something similar with the values_list
in a template. However, when I try to limit the values_list
to just the timepoint
variable on the model, it throws a TemplateSyntaxError
Could not parse the remainder: '('template')' from 'patient.outcome_set.values_list('template')'
If I print the values_list
to the screen using {{ patient.outcome_set.values_list }}
it prints all the values of each outcome fine, but I can't work out how to limit the values_list to just the timepoint variable.
Current template:
<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>
django django-templates django-views
add a comment |
I am trying to access the values_list
of a query_set in a template.
In a view I have used the following if statement to determine whether an Outcome
(model) exists for a given Participant
(model):
if not form.cleaned_data['timepoint'] in patient.outcome_set.values_list('timepoint', flat=True):
This worked perfectly - now I want to be able to do something similar with the values_list
in a template. However, when I try to limit the values_list
to just the timepoint
variable on the model, it throws a TemplateSyntaxError
Could not parse the remainder: '('template')' from 'patient.outcome_set.values_list('template')'
If I print the values_list
to the screen using {{ patient.outcome_set.values_list }}
it prints all the values of each outcome fine, but I can't work out how to limit the values_list to just the timepoint variable.
Current template:
<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>
django django-templates django-views
add a comment |
I am trying to access the values_list
of a query_set in a template.
In a view I have used the following if statement to determine whether an Outcome
(model) exists for a given Participant
(model):
if not form.cleaned_data['timepoint'] in patient.outcome_set.values_list('timepoint', flat=True):
This worked perfectly - now I want to be able to do something similar with the values_list
in a template. However, when I try to limit the values_list
to just the timepoint
variable on the model, it throws a TemplateSyntaxError
Could not parse the remainder: '('template')' from 'patient.outcome_set.values_list('template')'
If I print the values_list
to the screen using {{ patient.outcome_set.values_list }}
it prints all the values of each outcome fine, but I can't work out how to limit the values_list to just the timepoint variable.
Current template:
<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>
django django-templates django-views
I am trying to access the values_list
of a query_set in a template.
In a view I have used the following if statement to determine whether an Outcome
(model) exists for a given Participant
(model):
if not form.cleaned_data['timepoint'] in patient.outcome_set.values_list('timepoint', flat=True):
This worked perfectly - now I want to be able to do something similar with the values_list
in a template. However, when I try to limit the values_list
to just the timepoint
variable on the model, it throws a TemplateSyntaxError
Could not parse the remainder: '('template')' from 'patient.outcome_set.values_list('template')'
If I print the values_list
to the screen using {{ patient.outcome_set.values_list }}
it prints all the values of each outcome fine, but I can't work out how to limit the values_list to just the timepoint variable.
Current template:
<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>
django django-templates django-views
django django-templates django-views
asked Nov 20 '18 at 5:31
BradenBraden
8011
8011
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Though this kind of logic is more suited in views, you can use a custom template tag for this. Something like below.
# extra_tags.py
@register.filter
def get_value_in_qs(queryset, key):
return queryset.values(key, flat=True)
Then you can use it in your template in this way:
{% 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 %} ...
....
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386786%2faccess-a-querysets-values-list-in-django-template%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Though this kind of logic is more suited in views, you can use a custom template tag for this. Something like below.
# extra_tags.py
@register.filter
def get_value_in_qs(queryset, key):
return queryset.values(key, flat=True)
Then you can use it in your template in this way:
{% 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 %} ...
....
add a comment |
Though this kind of logic is more suited in views, you can use a custom template tag for this. Something like below.
# extra_tags.py
@register.filter
def get_value_in_qs(queryset, key):
return queryset.values(key, flat=True)
Then you can use it in your template in this way:
{% 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 %} ...
....
add a comment |
Though this kind of logic is more suited in views, you can use a custom template tag for this. Something like below.
# extra_tags.py
@register.filter
def get_value_in_qs(queryset, key):
return queryset.values(key, flat=True)
Then you can use it in your template in this way:
{% 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 %} ...
....
Though this kind of logic is more suited in views, you can use a custom template tag for this. Something like below.
# extra_tags.py
@register.filter
def get_value_in_qs(queryset, key):
return queryset.values(key, flat=True)
Then you can use it in your template in this way:
{% 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 %} ...
....
answered Nov 20 '18 at 6:40
May.DMay.D
558214
558214
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386786%2faccess-a-querysets-values-list-in-django-template%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown