我在通过 django 一对多关系访问数据时遇到问题。经过 3 天的艰苦工作,我想出了一种方法,通过覆盖get_context_data方法来显示关系中的数据。我想知道这是否是正确的方法。这有效,但我可以想象有一种更好的方法来做到这一点,我在文档中错过了。
这是代码:
class QuestionDetailView(DetailView):
model = Question
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['answers'] = Answer.objects.filter(firm=context['object'])
return context
以下是模型的代码:
class Question(models.Model):
text = models.CharField(max_length=120, unique=True)
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
这是我模板中的代码:
{% extends "base.html" %}
{% block body %}
<div class="">
<h3>{{ object.text }}</h3>
<p>Answers:</p>
<ul>
{% for answer in answers %}
<li> {{ answer }}</li>
{%empty%}
<li>No answers</li>
{% endfor %}
</ul>
</div>
{% endblock %}
向question
字段添加related_name
。
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="answers")
或者,只需使用 Django 给出的默认值:answer_set
然后在模板中,您可以执行以下操作:
{% for answer in object.answers.all %}
<li> {{ answer }}</li>
{% empty %}
<li>No answers</li>
{% endfor %}
无需重写get_context_data
,除非您想对查询集执行更具体的操作。