【发布时间】:2017-04-19 07:26:30
【问题描述】:
我有以下基于类的视图,我在其中执行查询集:
class PatientDetail(LoginRequiredMixin, DetailView):
model = PatientProfile
template_name = 'patient_detail.html'
context_object_name = 'patientdetail'
def get_context_data(self, **kwargs):
context=super(PatientDetail, self).get_context_data(**kwargs)
queryset= RehabilitationSession.objects.filter(patient__slug=self.kwargs['slug'])
context.update({'patient_session_data': queryset,})
return context
当我在我的模板中访问patient_session_data 发送的键值时:
{% extends "base.html" %}
{% block content %}
{{patient_session_data}}
{% endblock content %}
我得到了QuerySet 对象:
<QuerySet [<RehabilitationSession: Hernando Zambrano Cuellar>, <RehabilitationSession: Hernando Zambrano Cuellar>, <RehabilitationSession: Hernando Zambrano Cuellar>]>
我想访问我的RehabilitationSession 模型的名为upper_extremity 的特定属性,然后我这样做:
{% for upperlimb in patient_session_data %}
{{upperlimb.upper_extremity}}
{%endfor%}
我在我的模板中得到了这个:
Izquierda Izquierda Izquierda
这意味着值的三倍,因为我的查询集返回了三个对象。这是逻辑。
为了访问我在模板中创建的单独方法的值:
{{patient_session_data.0.upper_extremity}}
我得到:Izquierda
我的目标
我不知道在我的PatientDetail cbv 中执行的查询集将返回的querysets objects RehabilitationSession 的数量,因为该数字是动态的,所以可能是返回的任意数量的对象。
我想读取每个patient_session_dataupper_extremity的值内容并根据值在我的模板中制作一些东西,
但我想以动态的方式阅读它,不使用{{patient_session_data.<0-1-2-3>.upper_extremity}}
例如在假设的情况下:
#if all objects returned have same value in upper_extremity
{% if patient_session_data.upper_extremity == 'Izquierda' %}
<div class="col-md-10">
<h5>Segmentos corporales a tratar</h5>
<small>Codo - mano - falange</small>
</div>
{%endif%}
我认为我已经计算了对象的数量并对其进行了一些操作,因为我没有明确的... 无论返回的对象数量如何,我如何才能以单独的方式访问动态方式返回的对象?
更新
我没有考虑到所有返回的对象在 upper_extremity 中具有不同值的可能性。这意味着我希望当返回的查询集对象具有Izquierda Derecha Izquierda 的混合值时,也能有所作为。
此时(在@2ps 提供的支持下,当查询集对象都具有upper_extremity='Izquierda' 时,当查询集对象都具有upper_extremity='Derecha' 时。
当查询集对象的upper_extremity 的值可能为时,我想执行一些操作:
对象查询集 1:upper_extremity='Derecha'
对象查询集 2:upper_extremity='Izquierda'
对象查询集 3:upper_extremity='Derecha'
. ..
等等……
根据@2ps的解决方案,我认为这个评估的核心在:
# Perform a set union with the values of 'upper_extremity' attribute for remove the repeated values(Izquierda and Derecha) and distinct them
upper_extremities = set(queryset.values_list('upper_extremity', flat=True).distinct())
# Create a empty dict like data destiny
all_match = dict()
# Iterate on all values possible
for value in ('Izquierda', 'Derecha', ): # add any other values you want here
# Fill the dictionary always that the longitude of upper_extremities (values get) be equal to 1 (?)
all_match[value] = value in upper_extremities and len(upper_extremities) == 1
# Send the result to the template
context['all_match'] = all_match
在我的模板中我认为...
{% if all_match.Izquierda and all_match.Derecha %}
<div class="col-md-10">
<h5>Segmentos corporales a tratar</h5>
<small>Codo - mano - falange</small>
</div>
{%endif%}
当对象查询集混合了upper_extremity 值(Derecha 和Izquierda)时,我如何覆盖另一个场景
谢谢你的新问题,我还没有弄清楚这个过程。
【问题讨论】:
标签: django django-templates django-template-filters