Source code for shuup.admin.form_modifier

from django.contrib import messages
from django.db.transaction import atomic

from shuup.apps.provides import get_provide_objects
from shuup.utils.excs import Problem


[docs] class ModifiableFormMixin: form_modifier_provide_key = None
[docs] def clean(self): cleaned_data = super().clean() for extend_class in get_provide_objects(self.form_modifier_provide_key): extend_class().clean_hook(self) return cleaned_data
[docs] class ModifiableViewMixin:
[docs] def add_extra_fields(self, form, object=None): for extend_class in get_provide_objects(form.form_modifier_provide_key): for field_key, field in extend_class().get_extra_fields(object) or []: form.fields[field_key] = field
[docs] def get_form(self, form_class=None): form = super().get_form(self.form_class) self.add_extra_fields(form, self.object) return form
[docs] def form_valid_hook(self, form, object): has_extension_errors = False for extend_class in get_provide_objects(form.form_modifier_provide_key): try: extend_class().form_valid_hook(form, object) except Problem as problem: has_extension_errors = True messages.error(self.request, problem) return has_extension_errors
[docs] @atomic def form_valid(self, form): response = super().form_valid(form) has_extension_errors = self.form_valid_hook(form, self.object) if has_extension_errors: return self.form_invalid(form) else: return response
[docs] class FormModifier: """Base class for form modifiers."""
[docs] def get_extra_fields(self, object=None): """Get extra fields to add to the form.""" return []
[docs] def clean_hook(self, form): """Hook for additional form cleaning.""" pass
[docs] def form_valid_hook(self, form, object): """Hook called when form is valid.""" pass