django页面和访问父对象

时间:2016-10-07 11:48:53

标签: django

我正在运行django 1.9,我有这两个简单的模型:

#models.py
class Question(models.Model):
    question_title = models.CharField(max_length=50)
    question_text = models.CharField(max_length=500)
class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    answer_text = models.CharField(max_length=500)

这只是查看答案:

 # views.py
 class QuestionView(generic.DetailView):
    model = Question
    template_name = 'forum/question.html'

但现在我想在视图中构建页面:

 # models.py updated
 class QuestionView(generic.ListView):
     model = Question
     template_name = 'forum/question.html'
     paginate_by = 10
     def get_queryset(self):
        return Question.objects.get(id=self.kwargs['pk']).answer_set.all()

但这会产生问题,我无法再访问模板中的问题对象:

#template.html
{{ question.question_title }}

我如何拥有这两个页面并访问问题对象?或者我现在想要一些根本不可能的东西?

PS。我导入我需要的一切(通用和更多),我只是将它们留给了可读性。

1 个答案:

答案 0 :(得分:1)

您可以定义get_context_data()

,将您喜欢的任何数据添加到视图中
def get_context_data(self, *args, **kwargs):
    context = super(ListView, self).get_context_data(*args, **kwargs):
    context['question'] = Question.objects.get(pk=self.kwargs['pk'])
    return context

或者,您可能会反映出原始的DetailView 已经让您可以通过模板中的{{ object.answer_set.all }}访问问题(通过默认对象)及其答案,而无需做任何事情。一个问题似乎不太可能有足够的答案需要分页,这是ListView给你的主要好处。