Skip to content

Instantly share code, notes, and snippets.

@vbmendes
Forked from rafaelnovello/group_users_form.py
Created February 1, 2012 02:19
Show Gist options
  • Save vbmendes/1714642 to your computer and use it in GitHub Desktop.
Save vbmendes/1714642 to your computer and use it in GitHub Desktop.
Select users to the group in group form on Django Admin.
# -*- coding: utf-8 -*-
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 = self.instance.user_set.all()
users_id = [user.id for user in users]
self.fields['group_users'].initial = users_id
def save(self, commit=True):
group = super(GroupAdminForm, self).save(commit=False)
old_save_m2m = getattr(self, 'save_m2m', lambda: None)
def save_m2m():
old_save_m2m()
group.user_set.clear()
for user in self.cleaned_data.get('group_users',[]):
group.user_set.add(user)
if commit:
group.save()
save_m2m()
else:
self.save_m2m = save_m2m
return group
@jeffrey4l
Copy link

Do we need revert the old old_save_m2m method? Just like below

def save(self, commit=True):
        group = super(GroupAdminForm, self).save(commit=False)
        old_save_m2m = getattr(self, 'save_m2m', lambda: None)
        def save_m2m():
            old_save_m2m()
            group.user_set.clear()
            for user in self.cleaned_data.get('group_users',[]):
                group.user_set.add(user)
            self.save_m2m = old_save_m2m # Revert the save_m2m method
        if commit:
            group.save()
            save_m2m()
        else:
            self.save_m2m = save_m2m
        return group

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment