我正在运行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。我导入我需要的一切(通用和更多),我只是将它们留给了可读性。
答案 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给你的主要好处。