繁体   English   中英

覆盖 django admin get_queryset()

[英]Overriding django admin get_queryset()

我有两个模型,其中一个是代理 model。在管理员中,我注册了两个模型并覆盖get_queryset()方法,但它没有按预期工作。
管理员.py

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.filter(language='en')

@admin.register(ProxyCategory)
class ProxyCategoryAdmin(CategoryAdmin):

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.filter(language='zh')

在管理页面ProxyCateegoryAdmin 中没有显示对象,如果我从CategoryAdmin中删除get_queryset() ,它可以工作但想要过滤它们。 提前致谢

如果您希望 ProxyCategoryAdmin 返回两种语言,请执行以下操作:

@admin.register(ProxyCategory)
class ProxyCategoryAdmin(admin.ModelAdmin):

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.filter(language_in=['zh','en'])

当您继承 CategoryAdmin 时,您最终会得到 2 个过滤器:EN 和 ZH 而不是 EN 或 ZH

可以在get_queryset方法中使用self.model来过滤出正确的model。

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if self.model == Category:
            return qs.filter(language='en')
        return qs

@admin.register(ProxyCategory)
class ProxyCategoryAdmin(CategoryAdmin):
    pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM