我有以下基于类的视图,我在其中执行查询集:
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>]>
我希望访问upper_extremity
模型中名为RehabilitationSession
的特定属性,然后我这样做:
{% for upperlimb in patient_session_data %}
{{upperlimb.upper_extremity}}
{%endfor%}
我在模板中得到了这个:
Izquierda Izquierda Izquierda
这意味着,值的三倍,因为我的queryset返回了三个对象。这是逻辑。
为了访问单独方式的值,我在我的模板中进行了这个:
{{patient_session_data.0.upper_extremity}}
我得到:Izquierda
我的目标
我不知道querysets objects
cbv中执行的查询集将返回PatientDetail
RehabilitationSession的数量,因为该数字是动态的,可能是返回的任意数量的对象。
我想阅读每个patient_session_data
upper_extremity
的价值内容,并在我的模板中根据值制作内容,
但我想用动态的方式阅读它,不使用{{patient_session_data.<0-1-2-3>.upper_extremity}}
例如在一个hypotetical案例中:
#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
)
谢谢,并原谅我的新问题,我还没有明确这个过程。