在使用django的通用ListView时,我想要包含一些根据get_queryset的结果计算的额外上下文数据,例如:
class BookListView(ListView):
model = Book
context_object_name = 'book_list'
template_name = 'book_list.html'
def get_queryset(self, *args, **kwargs):
qset = super(BookListView, self).get_queryset(*args, **kwargs)
return qset.filter(owner=self.request.user)
def get_context_data(self, **kwargs):
context = super(BookListView, self).get_context_data(**kwargs)
// just take this as an example, here the extra context data may be some
// complex result which is calculated against the result of get_queryset
context['2012_books_nr'] = self.get_queryset().filter(publish_year='2012').count()
return context
如果我像上面那样做,会导致任何(性能或其他)问题吗?这看起来有点奇怪,有没有更好的方法呢?
除此之外,我在get_context_data中调用get_queryset而没有任何args和kwargs,我怎样才能确保我得到与它自动调用的结果完全相同的结果?
如果在输入get_context_data之前存储了get_queryset的结果,那将是完美的,所以我可以检索结果,它是否存在?
答案 0 :(得分:2)
除了您应该使用queryset .count()
方法而不是在其上调用len()
之外,这很好。