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