基于已发布帖子的自定义过滤(在 Django 管理中)

问题描述 投票:0回答:1
我正在为一个社交网络开展一个培训项目,用户可以在其中发布他们的食谱。我想添加在 Django 管理中根据用户是否发布了食谱来过滤用户的功能。我的过滤器类别是:

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。

请指出我哪里做错了..

python django filtering admin
1个回答
0
投票
错误是由您将过滤器添加到

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,)
这将解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.