Django在模板中过滤不同的父母

时间:2014-07-22 10:22:17

标签: python django templates

我在项目中考虑了一个评估模型,就像

class Evaluation(models.Model):
    question        = models.ForeignKey(Question)
    value           = models.IntegerField('Value')
    creator         = models.ForeignKey(User)

    def __unicode__(self):
        return unicode(self.value)

在我的模板中,我想在表格中显示不同的评价

| question1 | creator1  : evaluation of creator1
            | creator2  : evaluation of creator2
-------------------------------------------------
| question2 | creator1  : evaluation of creator1
            | creator2  : evaluation of creator2
...

为此我必须区分我的查询集中的创建者,与问题相关。

不幸的是我无法创建过滤器或分组,这就是我想要的。 如何根据引用的问题轻松选择创建者及其评估?

1 个答案:

答案 0 :(得分:0)

您希望{% regroup %}模板标记(https://docs.djangoproject.com/en/1.6/ref/templates/builtins/#regroup)按Evaluation应用于question查询集顺序,最好使用select_related()(以避免N + 1查询问题)

# views.py

def myview(request):
   context = {
      "evaluations":Evaluation.objects.order_by("question", "creator").select_related()
      }
    return render(request, "mytemplate.html", context)

和你的模板:

# mytemplate.html

    {% regroup evaluations by question as questions_list %}
    <ul>
    {% for question in questions_list %}
      <li>{{ question.grouper }}
        <ul>
          {% for evaluation in question.list %}
          <li>{{ evaluation.creator }}: {{ evaluation }}
          {% endfor %}
        </ul>
      </li>  
     {% endfor %}
    </ul>