Skip to content

Commit 0da1dfb

Browse files
committed
fix: use django's inline js implementation
add an empty form, only if not submitting and extras required
1 parent bdacec2 commit 0da1dfb

File tree

3 files changed

+18
-291
lines changed

3 files changed

+18
-291
lines changed

advanced_filters/forms.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from django.db.models.fields import DateField
1616
from django.forms.formsets import formset_factory, BaseFormSet
1717
from functools import reduce
18+
from django.utils.functional import cached_property
1819
from django.utils.text import capfirst
1920
from django.utils.translation import gettext_lazy as _
2021

@@ -199,6 +200,14 @@ def get_form_kwargs(self, index):
199200
kwargs['model_fields'] = self.model_fields
200201
return kwargs
201202

203+
@cached_property
204+
def forms(self):
205+
"""Instantiate forms at first property access."""
206+
forms = super().forms
207+
if self.extra > 0 and not self.data:
208+
forms += [self.empty_form]
209+
return forms
210+
202211

203212
AFQFormSet = formset_factory(
204213
AdvancedFilterQueryForm, formset=AdvancedFilterFormSet,
@@ -221,6 +230,7 @@ class Media:
221230
'advanced-filters/jquery_adder.js',
222231
SELECT2_JS,
223232
'magnific-popup/jquery.magnific-popup.js',
233+
'admin/js/inlines.js',
224234
'advanced-filters/advanced-filters.js',
225235
]
226236
js = required_js
@@ -289,23 +299,18 @@ def __init__(self, *args, **kwargs):
289299

290300
def clean(self):
291301
cleaned_data = super().clean()
292-
if not self.fields_formset.is_valid():
293-
logger.debug(
294-
"Errors validating advanced query filters: %s",
295-
pformat([(f.errors, f.non_field_errors())
296-
for f in self.fields_formset.forms]))
297-
raise forms.ValidationError("Error validating filter forms")
298302
cleaned_data['model'] = "{}.{}".format(self._model._meta.app_label,
299303
self._model._meta.object_name)
300304
return cleaned_data
301305

302306
@property
303307
def _non_deleted_forms(self):
304308
forms = []
305-
for form in self.fields_formset.forms:
306-
if form in self.fields_formset.deleted_forms:
307-
continue # skip deleted forms when generating query
308-
forms.append(form)
309+
if self.fields_formset.is_valid():
310+
for form in self.fields_formset.forms:
311+
if form in self.fields_formset.deleted_forms:
312+
continue # skip deleted forms when generating query
313+
forms.append(form)
309314
return forms
310315

311316
def generate_query(self):
@@ -345,6 +350,7 @@ def initialize_form(self, instance, model, data=None, extra=None):
345350
)
346351

347352
def save(self, commit=True):
348-
self.instance.query = self.generate_query()
349-
self.instance.model = self.cleaned_data.get('model')
353+
if self.is_valid():
354+
self.instance.query = self.generate_query()
355+
self.instance.model = self.cleaned_data.get('model')
350356
return super().save(commit)

advanced_filters/static/orig_inlines.js

Lines changed: 0 additions & 278 deletions
This file was deleted.

advanced_filters/static/orig_inlines.min.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)