2012-07-23 61 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 
相關問題