[英]Django: how to add users to group in bulk in admin panel?
我想基于过滤器和我在管理面板中的选择将许多用户添加到组中。 但是用户更改列表视图不提供此类操作。 那么有没有办法做到这一点? 任何片段或应用程序?
请不要使用shell,因为我希望开发人员以外的其他人也可以这样做。 令我惊讶的是,Django没有为这种常见任务提供方法。
谢谢!
恐怕该特殊功能尚未在面板上公开。 您必须卷起袖子并打开外壳。 您可以使用以下代码段,只需将过滤器放在定义.get()和.exclude()的位置即可。
$ python manage.py shell
>>> from django.contrib.auth.models import User, Group
>>> my_group = Group.objects.get(name='groupname')
>>> my_users = User.objects.filter(<your_filter>)
>>> for my_user in my_users:
... my_group.user_set.add(my_user)
from django.forms import ModelForm
from django import forms
from django.contrib.auth.models import Group, User
class GroupAdminForm(ModelForm):
class Meta:
model = Group
group_users = forms.ModelMultipleChoiceField(label=u'Usuários deste Grupo', queryset=User.objects.all())
def __init__(self, *args, **kwargs):
super(GroupAdminForm, self).__init__(*args, **kwargs)
users_id = list()
# Avoid 'No exception supplied'
try:
users = self.instance.group.user_set.all()
for u in users:
users_id.append(u.id)
if self.fields.has_key('group_users'):
self.fields['group_users'].initial = users_id
except Exception, e:
pass
def clean(self):
group = self.cleaned_data['group']
group.save()
if group.user_set.all():
group.user_set.clear()
try:
users = self.cleaned_data['group_users']
for user in users:
group.user_set.add(user)
except:
return self.cleaned_data
return self.cleaned_data
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.