Django DRY List迭代

时间:2012-12-08 18:53:22

标签: django list iteration dry

作为刚刚开始在我的稀缺时间使用Django的人,我提前感谢您的时间,帮助我学习如何使我的代码更清洁和正确。

我有两个由两个查询集组成的列表,如下所示:

company_list = [Company_stats.objects.filter(period__exact=P, company_name__in=master_names)]
industry_list = [Industry_stats.objects.filter(period__exact=P, industry_name__in=master_names)]    

我遍历模板中的两个列表以创建一个小表。

{%for c in company_list%}
    {%for z in c %}
         {{ z.company_name }}                  
         {{ z.nxt_m_ret_est }} 
         {{ z.nxt_m_ret_rat }} 
    {% endfor %}
{% endfor %}

{%for c in industry_list%}
    {%for z in c %} 
         {{ z.industry_name }}                  
         {{ z.nxt_m_ret_est }} 
         {{ z.nxt_m_ret_rat }}  
    {% endfor %}
{% endfor %}

这样可以正常工作,因为我使用相同的代码,除了z.industry_name与z.company_name之外我想知道你是否可以帮我找出更好的方法来做到这一点。

我已经尝试将列表合并到一个列表中,其中包含两个查询集,除了明显的问题,我不知道如何告诉它检索z.company_name或z.industry_name,具体取决于查询集在哪里数据来自,因为一切都成为同一个列表的一部分。

2 个答案:

答案 0 :(得分:2)

在两个模型上将字段更改为name后,您可以将两个查询集放在同一个列表中,然后对其进行迭代。

master_list = [model.objects.filter(period__exact=P, name__in=master_names) for model in (Company_stats, Industry_stats)]

...

{% for l in master_list %}
    {% for i in l %}
         {{ i.name }}                  
         {{ i.nxt_m_ret_est }} 
         {{ i.nxt_m_ret_rat }} 
    {% endfor %}
{% endfor %}

答案 1 :(得分:0)

如果您希望代码更通用,那么有助于使您的名称更通用。您是否可以在整个系统中将industry_namecompany_name更改为name