在django模板中过滤查询集

Nas*_*sir 0 python django

我有一个模型如下:

class Venture(models.Model):
    name = models.CharField(_('name'), max_length=255)
    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField()


class QuestionSet(models.Model):
    title = models.CharField(_(u'title'), max_length=100)


class Question(models.Model):
    title = models.CharField(_(u'title'), max_length=255)
    qset = models.ForeignKey(QuestionSet, related_name='questions')


class Answer(models.Model):
    question = models.ForeignKey(Question, related_name='answers')
    responder = models.ForeignKey(User)
    venture = models.ForeignKey(Venture, related_name='answers')
    text = models.TextField(_(u'answer'), blank=True, null=True)
    timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

存在一组针对所有用户的预定义问题.对于每个Venture,我有一个每个QuestionSet的页面,其中列出了该集合中的问题,我循环了以下问题:

<div> {{ venture.name }} </div>
{% for question in qset.questions.all %}
  <div class="qset-question control-group">
    {{ question.title }}
    {# How do I access the answer for the current venture? #}
  </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

问题是什么是获得当前企业的问题答案的最佳方式.我想在这里输出一些关于答案的信息.

任何帮助表示赞赏.

Nas*_*sir 6

我通过创建自定义模板tage解决了这个问题.这是代码:

@register.assignment_tag
def question_answer(venture, question):
    answers = question.answers.filter(venture=venture)
    return answers[0] if answers else None
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

{% question_answer venture question as answer %}
{{ answer }}
Run Code Online (Sandbox Code Playgroud)