From c145191e554f8473b9de8f10abf94291b39a4e10 Mon Sep 17 00:00:00 2001 From: Ludovic Stephan Date: Mon, 3 Aug 2020 19:06:48 +0200 Subject: [PATCH] Use new models and mixins --- kfet/auth/fields.py | 24 +++++++++++++++-------- kfet/auth/forms.py | 46 ++++++++++++--------------------------------- kfet/auth/views.py | 23 ++++++++++------------- 3 files changed, 38 insertions(+), 55 deletions(-) diff --git a/kfet/auth/fields.py b/kfet/auth/fields.py index a5544787..4a3c56ec 100644 --- a/kfet/auth/fields.py +++ b/kfet/auth/fields.py @@ -1,17 +1,25 @@ from django import forms -from django.contrib.auth.models import Permission -from django.contrib.contenttypes.models import ContentType +from django.contrib.auth.models import Group from django.forms import widgets +from .models import KFetPermission + class KFetPermissionsField(forms.ModelMultipleChoiceField): def __init__(self, *args, **kwargs): - queryset = Permission.objects.filter( - content_type__in=ContentType.objects.filter(app_label="kfet") - ) - super().__init__( - queryset=queryset, widget=widgets.CheckboxSelectMultiple, *args, **kwargs - ) + kwargs.setdefault("queryset", KFetPermission.kfet.all()) + kwargs.setdefault("widget", widgets.CheckboxSelectMultiple) + super().__init__(*args, **kwargs) + + def label_from_instance(self, obj): + return obj.name + + +class KFetGroupsField(forms.ModelMultipleChoiceField): + def __init__(self, *args, **kwargs): + kwargs.setdefault("queryset", Group.objects.filter(kfetgroup__isnull=False)) + kwargs.setdefault("widget", widgets.SelectMultiple) + super().__init__(*args, **kwargs) def label_from_instance(self, obj): return obj.name diff --git a/kfet/auth/forms.py b/kfet/auth/forms.py index b1628af0..37f4556e 100644 --- a/kfet/auth/forms.py +++ b/kfet/auth/forms.py @@ -1,48 +1,26 @@ -from django import forms -from django.contrib.auth.models import Group, User +from django.contrib.auth.models import User +from django.utils.translation import ugettext_lazy as _ -from .fields import KFetPermissionsField +from shared.forms import ProtectedModelForm + +from .fields import KFetGroupsField, KFetPermissionsField +from .models import KFetGroup -class GroupForm(forms.ModelForm): +class GroupForm(ProtectedModelForm): 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) + protected_fields = ["permissions"] class Meta: - model = Group + model = KFetGroup fields = ["name", "permissions"] -class UserGroupForm(forms.ModelForm): - groups = forms.ModelMultipleChoiceField( - Group.objects.filter(name__icontains="K-Fêt"), - label="Statut équipe", - required=False, - ) +class UserGroupForm(ProtectedModelForm): + groups = KFetGroupsField(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) + protected_fields = ["groups"] class Meta: model = User diff --git a/kfet/auth/views.py b/kfet/auth/views.py index 5dd048e9..f57e8415 100644 --- a/kfet/auth/views.py +++ b/kfet/auth/views.py @@ -1,7 +1,7 @@ from django.contrib import messages from django.contrib.auth import authenticate, login from django.contrib.auth.decorators import permission_required -from django.contrib.auth.models import Group, User +from django.contrib.auth.models import User from django.contrib.auth.views import redirect_to_login from django.contrib.messages.views import SuccessMessageMixin from django.db.models import Prefetch @@ -15,7 +15,7 @@ from django.views.generic import View from django.views.generic.edit import CreateView, UpdateView from .forms import GroupForm -from .models import GenericTeamToken +from .models import GenericTeamToken, KFetGroup class GenericLoginView(View): @@ -113,23 +113,20 @@ def account_group(request): user_pre = Prefetch( "user_set", queryset=User.objects.select_related("profile__account_kfet") ) - groups = Group.objects.filter(name__icontains="K-Fêt").prefetch_related( - "permissions", user_pre - ) + groups = KFetGroup.objects.prefetch_related("permissions", user_pre) return render(request, "kfet/account_group.html", {"groups": groups}) -class AccountGroupCreate(SuccessMessageMixin, CreateView): - model = Group +class AccountGroupFormMixin(SuccessMessageMixin): + model = KFetGroup template_name = "kfet/account_group_form.html" form_class = GroupForm + success_url = reverse_lazy("kfet.account.group") + + +class AccountGroupCreate(AccountGroupFormMixin, CreateView): success_message = "Nouveau groupe : %(name)s" - success_url = reverse_lazy("kfet.account.group") -class AccountGroupUpdate(SuccessMessageMixin, UpdateView): - queryset = Group.objects.filter(name__icontains="K-Fêt") - template_name = "kfet/account_group_form.html" - form_class = GroupForm +class AccountGroupUpdate(AccountGroupFormMixin, UpdateView): success_message = "Groupe modifié : %(name)s" - success_url = reverse_lazy("kfet.account.group")