Use new models and mixins

This commit is contained in:
Ludovic Stephan 2020-08-03 19:06:48 +02:00
parent 91852bd4a0
commit c145191e55
3 changed files with 38 additions and 55 deletions

View file

@ -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

View file

@ -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

View file

@ -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")