简体   繁体   English

基于Django类的视图,使用'queryset'属性时的语言值错误

[英]Django class based view, wrong language value when using 'queryset' attribute

When I use translation.get_language() in the queryset attribute of a class based view it returns an incorrect value when changing the language. 当我在基于类的视图的queryset属性中使用translation.get_language()时,更改语言时它将返回错误的值。

class LandingPageOverview(ListView):
    model = LandingPage
    context_object_name = 'landingpages'
    template_name = 'landingpage/overview.html'
    queryset = LandingPage.objects.filter(language=translation.get_language())

When I use get_queryset the right value is returned. 当我使用get_queryset将返回正确的值。

class LandingPageOverview(ListView):
    model = LandingPage
    context_object_name = 'landingpages'
    template_name = 'landingpage/overview.html'

def get_queryset(self):
    return LandingPage.objects.filter(language=translation.get_language())

Can anyone explain why? 谁能解释为什么?

In the first example, the language is evaluated when class is loaded at first time. 在第一个示例中,在首次加载类时评估语言。 Try for example this: 例如尝试这样:

def a(x=[]):
    x.append(1)
    print x


a()
a()
a()
a()

result will be: 结果将是:

[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]

EDIT : 编辑

you could do something like this: 您可以执行以下操作:

class LandingPageOverview(ListView):
    model = LandingPage
    context_object_name = 'landingpages'
    template_name = 'landingpage/overview.html'

    @property
    def queryset(self):
        return LandingPage.objects.filter(language=translation.get_language())

and use it like you want: 并根据需要使用它:

l = LandingPageOverview()
l.queryset

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM