0

我在通过 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 %}
4

1 回答 1

2

related_name在您的question字段中添加一个。

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除非您想对查询集执行更具体的操作,否则无需覆盖。

于 2020-01-28T04:13:06.150 回答