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