require all fields on json form submit
This commit is contained in:
parent
d2ff1b522d
commit
7b78b82949
2 changed files with 12 additions and 3 deletions
|
@ -23,7 +23,7 @@ from c3nav.mapdata.models.access import AccessPermission
|
|||
|
||||
|
||||
class EditorFormBase(I18nModelFormMixin, ModelForm):
|
||||
def __init__(self, *args, space_id=None, request=None, force_geometry_editable=False, **kwargs):
|
||||
def __init__(self, *args, space_id=None, request=None, force_geometry_editable=False, is_json=False, **kwargs):
|
||||
self.request = request
|
||||
super().__init__(*args, **kwargs)
|
||||
creating = not self.instance.pk
|
||||
|
@ -185,6 +185,10 @@ class EditorFormBase(I18nModelFormMixin, ModelForm):
|
|||
if 'data' in self.fields and 'data' in self.initial:
|
||||
self.initial['data'] = json.dumps(self.initial['data'])
|
||||
|
||||
self.is_json = is_json
|
||||
self.missing_fields = tuple((name, field) for name, field in self.fields.items()
|
||||
if name not in self.data and not field.required)
|
||||
|
||||
def clean_redirect_slugs(self):
|
||||
old_redirect_slugs = set(self.redirect_slugs)
|
||||
new_redirect_slugs = set(s for s in (s.strip() for s in self.cleaned_data['redirect_slugs'].split(',')) if s)
|
||||
|
@ -222,6 +226,10 @@ class EditorFormBase(I18nModelFormMixin, ModelForm):
|
|||
return data
|
||||
|
||||
def clean(self):
|
||||
if self.is_json:
|
||||
for name, field in self.missing_fields:
|
||||
self.add_error(name, field.error_messages['required'])
|
||||
|
||||
if 'geometry' in self.fields:
|
||||
if not self.cleaned_data.get('geometry'):
|
||||
raise ValidationError('Missing geometry.')
|
||||
|
|
|
@ -335,8 +335,9 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
|
|||
ctx['obj_title'] = obj.title
|
||||
return render(request, 'editor/delete.html', ctx)
|
||||
|
||||
data = getattr(request, 'json_body', request.POST)
|
||||
form = model.EditorForm(instance=model() if new else obj, data=data,
|
||||
json_body = getattr(request, 'json_body', None)
|
||||
data = json_body if json_body is not None else request.POST
|
||||
form = model.EditorForm(instance=model() if new else obj, data=data, is_json=True,
|
||||
request=request, space_id=space_id, force_geometry_editable=force_geometry_editable)
|
||||
if form.is_valid():
|
||||
# Update/create objects
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue