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