Django:从一对多关系获取数据的正确方法?



我在通过 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,除非您想对查询集执行更具体的操作。

相关内容

  • 没有找到相关文章

最新更新