一个 Django DetailView 中的两个模型并按它们之间的关系进行过滤

luk*_*s06 0 python django django-models django-views django-generic-views

我有个问题。在我的中,DetailView我想放置来自两个模型的数据。此外,我想过滤它们,我的scenario-detail只有与特定场景相关的评论,由ForeignKey->Scenario相关。

我的views.py

class ScenarioDetailView(LoginRequiredMixin, DetailView):
    model = Scenario

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['comments'] = Comment.objects.all()
        return context
Run Code Online (Sandbox Code Playgroud)

scenario_detail.html有一个简单的{{ comments }}

我考虑在 中过滤我的评论对象views.py,例如:Comment.objects.get(commentScenario=Scenario.id)但它根本不起作用。

我的models.py

class Scenario(models.Model):
    scenarioTitle = models.CharField(max_length=256)
    scenarioArea = models.ForeignKey(ScenarioArea, on_delete=models.CASCADE)
    scenarioAuthor = models.ForeignKey(User, on_delete=models.CASCADE)
    scenarioDate = models.DateTimeField(default=timezone.now)
    scenarioDescription = models.TextField()

    def __str__(self):
        return self.scenarioTitle

    def get_absolute_url(self):
        return reverse('scenario-detail', kwargs={'pk': self.pk})

class Comment(models.Model):
    commentText = models.CharField(max_length=256)
    commentScenario = models.ForeignKey(Scenario, on_delete=models.CASCADE)
    commentAuthor = models.ForeignKey(User, on_delete=models.CASCADE)
    commentDate = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.commentText
Run Code Online (Sandbox Code Playgroud)

urls.py

path('scenario/<int:pk>/', ScenarioDetailView.as_view(), name='scenario-detail'),
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?

Ped*_*ian 5

您无需向模板发送任何额外的上下文即可显示相关评论;因为您已经有与您的后向关系相关的评论。Scenario

因此,您只需Scenario.comment_set.all在模板中使用即可访问它们。

举个例子:

{% for comment in object.comment_set.all %}
  {{ comment }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)