“树状”下拉列表遍历Django中的外键

时间:2014-09-16 00:26:11

标签: python django

我有一些形式的模型:

class Poll(models.Model):
    question_text = models.CharField(max_length=400)

class PollChoice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)

class PollVote(models.Model):
    poll_choice = models.OneToOneField(PollChoice)
    weight = models.IntegerField()

假设我有两个带有不同问题的民意调查对象(例如“你喜欢菠萝吗?”和“你小时候吮吸拇指吗?”),每个都有'是'和'否'民意调查。目前,如果我尝试在管理员中创建一个新的PollVote对象,PollChoice下拉列表将通过以下选项向我致意:

Yes
No
Yes
No

这并没有告诉我哪个投票我会投票。有没有办法创建这个表格的下拉菜单?

<Do you like pineapples?>
    Yes
    No
<Did you suck your thumb as a child?>
    Yes
    No

尖括号中的条目理想情况下是不可选择的,仅用于消除我选择的PollChoice的歧义。如果需要的话,我愿意加入其他应用程序。

1 个答案:

答案 0 :(得分:1)

您是否在询问如何根据模型结构呈现HTML?可以使用select_related完成。这是一个例子:
视图:

polls = Poll.objects.select_related('pollchoice__poll').all()
return render(request, 'test_poll.html', {'polls': polls})

模板:

<form>
    {% for poll in polls %}
        <p>&lt;{{ poll.question_text }}&gt;</p>
        {% for pollchoice in poll.pollchoice_set.all %}
            <input type="radio" name="question_{{poll.id}}" value="choice_{{pollchoice.id}}"> {{pollchoice.choice_text}} <br/>
        {% endfor %}
    {% endfor %}
</form>