【问题标题】:django: calculation against result of get_queryset in get_context_datadjango:根据get_context_data中get_queryset的结果计算
【发布时间】:2014-05-03 14:38:28
【问题描述】:

在使用 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的结果就完美了,这样我就可以检索结果了,它存在吗?

【问题讨论】:

    标签: python django generics views


    【解决方案1】:

    这很好,除了您应该使用查询集.count() 方法而不是对其调用len()。

    【讨论】:

    • 谢谢,我更新了我的问题来解决它,只关注我的主要问题:)
    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 2017-11-23
    • 2022-10-03
    • 1970-01-01
    • 2023-03-29
    • 2021-08-10
    • 1970-01-01
    • 2018-10-18
    相关资源
    最近更新 更多