簡體   English   中英

Django:如何在管理面板中批量添加用戶到組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM