python - django:根据 get_context_data 中的 get_queryset 结果进行计算

标签 python django generics view

在使用 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 时没有任何参数和 kwargs,如何确保我得到与其自动调用的结果完全相同的结果?

如果在输入 get_context_data 之前有东西存储 get_queryset 的结果就完美了,这样我就可以检索结果,它存在吗?

最佳答案

这很好,除了您应该使用 queryset .count() 方法而不是调用 len() 的事实。

关于python - django:根据 get_context_data 中的 get_queryset 结果进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639902/

相关文章:

Python 2.7 未在 Cygwin 中加载

python - Python 中的位置排名和关系处理

python - unique_together 中的多个元组

scala - 可以使 scala 需要一个非 Nothing 泛型方法参数并返回类型安全

python - 用户定义的通用类型和 collections.abc

python - 使用一个已经打开的网页(带 Selenium )到 beautifulsoup?

python - 如何在分割中找到边界之间的最大值?

python - 从单个 Sphinx 配置生成多个不同 pdf 的任何方法

javascript - 在 IE 中单击表单按钮后重新加载页面

Java泛型返回参数类型的泛型列表