from django import forms from django.contrib.auth.models import Group, User from .fields import KFetPermissionsField class GroupForm(forms.ModelForm): permissions = KFetPermissionsField() def clean_name(self): name = self.cleaned_data["name"] return "K-Fêt %s" % name def clean_permissions(self): kfet_perms = self.cleaned_data["permissions"] # TODO: With Django >=1.11, the QuerySet method 'difference' can be # used. # other_groups = self.instance.permissions.difference( # self.fields['permissions'].queryset # ) if self.instance.pk is None: return kfet_perms other_perms = self.instance.permissions.exclude( pk__in=[p.pk for p in self.fields["permissions"].queryset] ) return list(kfet_perms) + list(other_perms) class Meta: model = Group fields = ["name", "permissions"] class UserGroupForm(forms.ModelForm): groups = forms.ModelMultipleChoiceField( Group.objects.filter(name__icontains="K-Fêt"), label="Statut équipe", required=False, ) def clean_groups(self): kfet_groups = self.cleaned_data.get("groups") if self.instance.pk is None: return kfet_groups other_groups = self.instance.groups.exclude(name__icontains="K-Fêt") return list(kfet_groups) + list(other_groups) class Meta: model = User fields = ["groups"]