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

时间:2018-04-22 10:50:28

标签: python django django-admin

我希望通过为所选用户设置 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)

我尝试了一些方法,它最终禁止包括超级用户在内的所有用户或提供错误: 用户匹配查询不存在。 < / p>

我想知道这是一个我想要实现的简单功能,但任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

您不需要其他查询来获取操作方法中的特定用户。使用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是查询集方法,并且它不适用于单个实例。