django:计算get_context_data中get_queryset的结果

时间:2014-03-25 15:58:16

标签: python django generics views

在使用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的结果,那将是完美的,所以我可以检索结果,它是否存在?

1 个答案:

答案 0 :(得分:2)

除了您应该使用queryset .count()方法而不是在其上调用len()之外,这很好。