0

translation.get_language()クラスベースビューの属性で使用するquerysetと、言語を変更すると誤った値が返されます。

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

誰かが理由を説明できますか?

4

1 に答える 1

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
于 2012-07-23T11:49:19.370 に答える