Skip to content
Snippets Groups Projects
Verified Commit e91551da authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Use ExtensibleForm from mixins.py

parent ad020641
No related branches found
No related tags found
1 merge request!184Improve announcement queries
...@@ -5,65 +5,16 @@ from django import forms ...@@ -5,65 +5,16 @@ from django import forms
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.forms.models import ModelFormMetaclass
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django_select2.forms import ModelSelect2MultipleWidget, Select2Widget from django_select2.forms import ModelSelect2MultipleWidget, Select2Widget
from material import Layout, Fieldset, Row from material import Layout, Fieldset, Row
from material.base import LayoutNode
from .mixins import ExtensibleForm
from .models import Group, Person, School, SchoolTerm, Announcement, AnnouncementRecipient from .models import Group, Person, School, SchoolTerm, Announcement, AnnouncementRecipient
class ExtensibleFormMetaclass(ModelFormMetaclass):
def __new__(mcs, name, bases, dct):
x = super().__new__(mcs, name, bases, dct)
if hasattr(x, "layout"):
base_layout = x.layout.elements
else:
base_layout = []
x.base_layout = base_layout
x.layout = Layout(*base_layout)
return x
class ExtensibleForm(forms.ModelForm, metaclass=ExtensibleFormMetaclass):
""" Base model for extensible forms
This mixin adds functionality which allows
- apps to add layout nodes to the layout used by django-material
Add layout nodes
================
```
from material import Fieldset
from aleksis.core.forms import ExampleForm
node = Fieldset("field_name")
ExampleForm.add_node_to_layout(node)
```
"""
@classmethod
def add_node_to_layout(cls, node: LayoutNode):
"""
Add a node to `layout` attribute
:param node: django-material layout node (Fieldset, Row etc.)
:type node: LayoutNode
"""
cls.base_layout.append(node)
cls.layout = Layout(*cls.base_layout)
class PersonAccountForm(forms.ModelForm): class PersonAccountForm(forms.ModelForm):
class Meta: class Meta:
model = Person model = Person
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment