From afef60e5a036b26a979b2e354e9abccd5345abc0 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Fri, 3 Apr 2020 11:41:37 +0200 Subject: [PATCH] Update forms - Add ExtensibleForm - Allow strings for layout nodes - Add layouts --- aleksis/core/forms.py | 46 ++++++++++++++++++++++++++++++++++++------ aleksis/core/mixins.py | 4 ++-- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py index aa9d9f8fc..c4e7dd73f 100644 --- a/aleksis/core/forms.py +++ b/aleksis/core/forms.py @@ -55,7 +55,25 @@ PersonsAccountsFormSet = forms.modelformset_factory( ) -class EditPersonForm(forms.ModelForm): +class EditPersonForm(ExtensibleForm): + layout = Layout( + Fieldset( + _("Base data"), + "short_name", + Row("user", "primary_group"), + "is_active", + Row("first_name", "additional_name", "last_name"), + ), + Fieldset(_("Address"), Row("street", "housenumber"), Row("postal_code", "place")), + Fieldset(_("Contact data"), "email", Row("phone_number", "mobile_number")), + Fieldset( + _("Advanced personal data"), + Row("sex", "date_of_birth"), + Row("photo", "photo_cropping"), + "guardians", + ), + ) + class Meta: model = Person fields = [ @@ -76,6 +94,8 @@ class EditPersonForm(forms.ModelForm): "sex", "photo", "photo_cropping", + "guardians", + "primary_group", ] widgets = {"user": Select2Widget} @@ -105,10 +125,15 @@ class EditPersonForm(forms.ModelForm): self.cleaned_data["user"] = new_user_obj -class EditGroupForm(forms.ModelForm): +class EditGroupForm(ExtensibleForm): + layout = Layout( + Fieldset(_("Common data"), "name", "short_name"), + Fieldset(_("Persons"), "members", "owners", "parent_groups"), + ) + class Meta: model = Group - fields = ["name", "short_name", "members", "owners", "parent_groups"] + exclude = [] widgets = { "members": ModelSelect2MultipleWidget( search_fields=[ @@ -130,13 +155,20 @@ class EditGroupForm(forms.ModelForm): } -class EditSchoolForm(forms.ModelForm): +class EditSchoolForm(ExtensibleForm): + layout = Layout( + Fieldset(_("School name"), "name", "name_official"), + Fieldset(_("School logo"), Row("logo", "logo_cropping")), + ) + class Meta: model = School fields = ["name", "name_official", "logo", "logo_cropping"] -class EditTermForm(forms.ModelForm): +class EditTermForm(ExtensibleForm): + layout = Layout("caption", Row("date_start", "date_end")) + class Meta: model = SchoolTerm fields = ["caption", "date_start", "date_end"] @@ -152,7 +184,9 @@ class AnnouncementForm(ExtensibleForm): valid_until_date = forms.DateField(label=_("Date")) valid_until_time = forms.TimeField(label=_("Time")) - persons = forms.ModelMultipleChoiceField(Person.objects.all(), label=_("Persons"), required=False) + persons = forms.ModelMultipleChoiceField( + Person.objects.all(), label=_("Persons"), required=False + ) groups = forms.ModelMultipleChoiceField(Group.objects.all(), label=_("Groups"), required=False) layout = Layout( diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index 12dfa55ec..8ba220c16 100644 --- a/aleksis/core/mixins.py +++ b/aleksis/core/mixins.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import Any, Callable, Optional +from typing import Any, Callable, Optional, Union from django.contrib.contenttypes.models import ContentType from django.db import models @@ -216,7 +216,7 @@ class ExtensibleForm(ModelForm, metaclass=_ExtensibleFormMetaclass): """ @classmethod - def add_node_to_layout(cls, node: LayoutNode): + def add_node_to_layout(cls, node: Union[LayoutNode, str]): """ Add a node to `layout` attribute -- GitLab