49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
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"]
|