Django 在listview中使用会话

Django 在listview中使用会话,django,django-views,Django,Django Views,我试图使用存储在会话中的变量(通过表单在先前的视图中设置)过滤listview中的查询集 正确的方法是什么 class SomeListView(ListView): model = MyModel test_filter = self.request.session['test_filter'] queryset = TariffPrices.objects.filter(test_filter) 您可以通过在get\u queryset方法中设置它来实现这一点 cl

我试图使用存储在会话中的变量(通过表单在先前的视图中设置)过滤listview中的查询集

正确的方法是什么

class SomeListView(ListView):
    model = MyModel
    test_filter = self.request.session['test_filter']
    queryset = TariffPrices.objects.filter(test_filter)

您可以通过在
get\u queryset
方法中设置它来实现这一点

class SomeListView(ListView):
    model = MyModel

    def get_queryset(self):
        test_filter = self.request.session.get('test_filter')
        if test_filter:
            return TariffPrices.objects.filter(test_filter)
        return TariffPrices.objects.all()

目前的问题是您试图在类级别上使用实例字段

您可以通过在
get\u queryset
方法中设置它来实现这一点

class SomeListView(ListView):
    model = MyModel

    def get_queryset(self):
        test_filter = self.request.session.get('test_filter')
        if test_filter:
            return TariffPrices.objects.filter(test_filter)
        return TariffPrices.objects.all()

目前的问题是,您试图在类级别上使用实例字段

,这很有意义。出于兴趣,为什么在没有默认值的情况下使用.get vs作为会话的键?啊键error@Yunti-
{}['test']
将导致一个错误,其中as
{}.get('test')
不存在:)(其中键不存在),如果未提供默认值,则默认值为
None
谢谢伟大的答案-注意,我是否也应该在get\u queryset上调用super()。@Yunti-如果需要,您可以不在末尾返回全部,最终的结果几乎是一样的(如果适用的话,我认为基本上没有订购),这是有道理的。出于兴趣,为什么在没有默认值的情况下使用.get vs作为会话的键?啊键error@Yunti-
{}['test']
将导致一个错误,其中as
{}.get('test')
不存在:)(其中键不存在),如果未提供默认值,则默认值为
None
谢谢伟大的答案-注意,我是否也应该在get\u queryset上调用super()。@Yunti-如果需要,您可以不在末尾返回全部,最终结果基本相同(我认为,如果适用的话,base会进行排序)