2012-07-23 64 views
0

当我在基于类的视图的queryset属性中使用translation.get_language()时,它在更改语言时返回错误的值。当使用'queryset'属性时,Django基于类的视图,错误的语言值

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

当我使用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()) 

任何人都可以解释为什么吗?

回答

1

在第一个示例中,语言是在第一次加载类时评估的。尝试例如这样的:

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


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

结果将是:

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

编辑

你可以做这样的事情:

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()) 

,并用它喜欢你想要:

l = LandingPageOverview() 
l.queryset 
相关问题