forked from DGNum/gestioCOF
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 import forms
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Group
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
from django.forms import widgets
|
from django.forms import widgets
|
||||||
|
|
||||||
|
from .models import KFetPermission
|
||||||
|
|
||||||
|
|
||||||
class KFetPermissionsField(forms.ModelMultipleChoiceField):
|
class KFetPermissionsField(forms.ModelMultipleChoiceField):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
queryset = Permission.objects.filter(
|
kwargs.setdefault("queryset", KFetPermission.kfet.all())
|
||||||
content_type__in=ContentType.objects.filter(app_label="kfet")
|
kwargs.setdefault("widget", widgets.CheckboxSelectMultiple)
|
||||||
)
|
super().__init__(*args, **kwargs)
|
||||||
super().__init__(
|
|
||||||
queryset=queryset, widget=widgets.CheckboxSelectMultiple, *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):
|
def label_from_instance(self, obj):
|
||||||
return obj.name
|
return obj.name
|
||||||
|
|
|
@ -1,48 +1,26 @@
|
||||||
from django import forms
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.models import Group, 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()
|
permissions = KFetPermissionsField()
|
||||||
|
|
||||||
def clean_name(self):
|
protected_fields = ["permissions"]
|
||||||
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:
|
class Meta:
|
||||||
model = Group
|
model = KFetGroup
|
||||||
fields = ["name", "permissions"]
|
fields = ["name", "permissions"]
|
||||||
|
|
||||||
|
|
||||||
class UserGroupForm(forms.ModelForm):
|
class UserGroupForm(ProtectedModelForm):
|
||||||
groups = forms.ModelMultipleChoiceField(
|
groups = KFetGroupsField(label=_("Statut équipe"), required=False,)
|
||||||
Group.objects.filter(name__icontains="K-Fêt"),
|
|
||||||
label="Statut équipe",
|
|
||||||
required=False,
|
|
||||||
)
|
|
||||||
|
|
||||||
def clean_groups(self):
|
protected_fields = ["groups"]
|
||||||
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:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth import authenticate, login
|
from django.contrib.auth import authenticate, login
|
||||||
from django.contrib.auth.decorators import permission_required
|
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.auth.views import redirect_to_login
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.db.models import Prefetch
|
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 django.views.generic.edit import CreateView, UpdateView
|
||||||
|
|
||||||
from .forms import GroupForm
|
from .forms import GroupForm
|
||||||
from .models import GenericTeamToken
|
from .models import GenericTeamToken, KFetGroup
|
||||||
|
|
||||||
|
|
||||||
class GenericLoginView(View):
|
class GenericLoginView(View):
|
||||||
|
@ -113,23 +113,20 @@ def account_group(request):
|
||||||
user_pre = Prefetch(
|
user_pre = Prefetch(
|
||||||
"user_set", queryset=User.objects.select_related("profile__account_kfet")
|
"user_set", queryset=User.objects.select_related("profile__account_kfet")
|
||||||
)
|
)
|
||||||
groups = Group.objects.filter(name__icontains="K-Fêt").prefetch_related(
|
groups = KFetGroup.objects.prefetch_related("permissions", user_pre)
|
||||||
"permissions", user_pre
|
|
||||||
)
|
|
||||||
return render(request, "kfet/account_group.html", {"groups": groups})
|
return render(request, "kfet/account_group.html", {"groups": groups})
|
||||||
|
|
||||||
|
|
||||||
class AccountGroupCreate(SuccessMessageMixin, CreateView):
|
class AccountGroupFormMixin(SuccessMessageMixin):
|
||||||
model = Group
|
model = KFetGroup
|
||||||
template_name = "kfet/account_group_form.html"
|
template_name = "kfet/account_group_form.html"
|
||||||
form_class = GroupForm
|
form_class = GroupForm
|
||||||
|
success_url = reverse_lazy("kfet.account.group")
|
||||||
|
|
||||||
|
|
||||||
|
class AccountGroupCreate(AccountGroupFormMixin, CreateView):
|
||||||
success_message = "Nouveau groupe : %(name)s"
|
success_message = "Nouveau groupe : %(name)s"
|
||||||
success_url = reverse_lazy("kfet.account.group")
|
|
||||||
|
|
||||||
|
|
||||||
class AccountGroupUpdate(SuccessMessageMixin, UpdateView):
|
class AccountGroupUpdate(AccountGroupFormMixin, UpdateView):
|
||||||
queryset = Group.objects.filter(name__icontains="K-Fêt")
|
|
||||||
template_name = "kfet/account_group_form.html"
|
|
||||||
form_class = GroupForm
|
|
||||||
success_message = "Groupe modifié : %(name)s"
|
success_message = "Groupe modifié : %(name)s"
|
||||||
success_url = reverse_lazy("kfet.account.group")
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue