Overriding django admin get_queryset()

<
@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')

<

Если вы хотите, чтобы 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

Вы можете использовать self.model в методе get_queryset для фильтрации правильной модели.

@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

Вернуться на верх