如何在Django-Admin中限制组中的用户数

时间:2014-12-12 21:26:34

标签: django django-admin

我一直在寻找这个问题的答案,我似乎无法找到它。我在django admin中创建了一个组,我想限制可以添加到其中的用户数。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

此代码应该是您所需要的:

更改组名称(示例中的'LIMITED'和您需要的值LIMIT。

无论如何,这段代码不能保证100%你正在寻找的东西,因为同时运行的2个不同的进程可以绕过这个检查(读取group.user_set.count() < LIMIT并允许操作)

在django中没有开箱即用的解决方案来阻止这种情况

from django.contrib.auth.admin import UserAdmin as _UserAdmin, User
from django.contrib.auth.forms import UserChangeForm as _UserChangeForm

class UserChangeForm(_UserChangeForm):
    def clean_groups(self):
        groups = self.cleaned_data.get('groups', [])
        for group in groups:
            if group.name == 'LIMITED' and group.user_set.count() == LIMIT: 
                raise ValidationError('Group %s does not accept more users' % group.name)
        return self.cleaned_data.get('groups')

class UserAdmin(_UserAdmin):
    form = UserChangeForm

admin.site.unregister(User)
admin.site.register(User, UserAdmin)