class UserHasRecipeFilter(admin.SimpleListFilter):
title = _('Posted recipes')
parameter_name = 'posted_recipes'
def lookups(self, request, model_admin):
return (
('yes', _('Yes')),
('no', _('No')),
)
def queryset(self, request, queryset):
if self.value() == 'yes':
return queryset.annotate(recipes_count=Count('recipes')).filter(recipes_count__gt=0)
elif self.value() == 'no':
return queryset.annotate(recipes_count=Count('recipes')).filter(recipes_count=0)
添加自定义过滤器:
@admin.register(UserProfile)
class UserAdmin(UserAdmin):
list_filter = ('is_active', 'UserHasRecipeFilter’,)
但是当我尝试运行 make migrations 时,它失败并出现以下错误:
错误:
: (admin.E116) 'list_filter[2]' 的值引用的是 'UserHasRecipeFilter',它不引用 Field。
list_filter
的方式引起的。在 Django 管理中,通过指定类本身而不是字符串表示来添加自定义过滤器。这一行:
list_filter = ('is_active', 'UserHasRecipeFilter',)
应替换为:
list_filter = ('is_active', UserHasRecipeFilter,)
通过此更改,您的 UserAdmin
类应如下所示:
@admin.register(UserProfile)
class UserAdmin(UserAdmin):
list_filter = ('is_active', UserHasRecipeFilter,)
这将解决您的问题。