Use new models and mixins
This commit is contained in:
parent
91852bd4a0
commit
c145191e55
3 changed files with 38 additions and 55 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Add table
Reference in a new issue