在django模板

时间:2016-12-04 23:52:58

标签: django django-templates django-template-filters

我有以下基于类的视图,我在其中执行查询集:

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值(DerechaIzquierda

时,如何覆盖另一个场景?

谢谢,并原谅我的新问题,我还没有明确这个过程。

0 个答案:

没有答案