from django import forms from django.contrib import admin from django.contrib.admin.widgets import FilteredSelectMultiple from django.contrib.auth.admin import GroupAdmin from django.contrib.auth.models import Group class GroupAdminForm(forms.ModelForm): users = forms.ModelMultipleChoiceField(queryset=AGLUser.objects.all(), widget=FilteredSelectMultiple('Users', False), required=False) class Meta: model = Group def __init__(self, *args, **kwargs): instance = kwargs.get('instance', None) if instance is not None: initial = kwargs.get('initial', {}) initial['users'] = instance.user_set.all() kwargs['initial'] = initial super(GroupChangeForm, self).__init__(*args, **kwargs) def save(self, commit=True): group = super(GroupChangeForm, self).save(commit=commit) if commit: group.user_set = self.cleaned_data['users'] else: old_save_m2m = self.save_m2m def new_save_m2m(): old_save_m2m() group.user_set = self.cleaned_data['users'] self.save_m2m = new_save_m2m return group class MyGroupAdmin(GroupAdmin): form = GroupAdminForm site = admin.AdminSite() site.register(Group, MyGroupAdmin)