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

2024-09-28 05:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在基于类的视图的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())

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

有人能解释为什么吗?你知道吗


Tags: namegetmodelobjectcontexttemplatetranslationlanguage
1条回答
网友
1楼 · 发布于 2024-09-28 05:23:53

在第一个示例中,在第一次加载类时对语言进行求值。举个例子:

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

相关问题 更多 >

    热门问题