[英]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.