Skip to main content
 首页 » 编程设计

python之Django 管理员,无法通过管理员操作按钮将 user.is_active 设置为 FALSE(禁止)

2025年01月19日27落叶

我希望通过为所选用户设置 user.is_active = False 来禁止用户使用 Django 管理中的操作按钮。

class MyUserAdmin(UserAdmin): 
list_display = ('username', 'first_name', 'last_name' , 'email') 
readonly_fields = ('first_name' , ('last_name') , ('email') , ('username')) 
actions = ['ban_users'] 
 
#USER BANNING FUNCTION 
def ban_users(self, request, queryset): 
    user_obj = User.objects.get(username= 'username') 
    user_obj.update(is_active = False) 
    user_obj.save() 
 
admin.site.unregister(User) 
admin.site.register(User, MyUserAdmin) 

我尝试了几种方法,要么最终禁止包括 super 用户在内的所有用户,要么给出错误:用户匹配查询不存在。

我知道这是一个我正在尝试实现的简单功能,但我们将不胜感激。

请您参考如下方法:

您不需要额外的查询来获取操作方法中的特定用户。使用 queryset 参数通过一个数据库查询更新所有选定的用户:

class MyUserAdmin(UserAdmin): 
    list_display = ('username', 'first_name', 'last_name' , 'email') 
    readonly_fields = ('first_name' , ('last_name') , ('email') , ('username')) 
    actions = ['ban_users'] 
 
    #USER BANNING FUNCTION 
    def ban_users(self, request, queryset): 
        queryset.update(is_active = False) 

另请注意update是查询集方法,它不适用于单个实例。