Fixed #27563 -- Moved "apply limit_choices_to" code from BaseModelForm to fields_for_model().
This commit is contained in:
parent
6d1394182d
commit
6abd6c598e
|
@ -170,6 +170,11 @@ def fields_for_model(model, fields=None, exclude=None, widgets=None,
|
||||||
formfield = formfield_callback(f, **kwargs)
|
formfield = formfield_callback(f, **kwargs)
|
||||||
|
|
||||||
if formfield:
|
if formfield:
|
||||||
|
# Apply ``limit_choices_to``.
|
||||||
|
if hasattr(formfield, 'queryset') and hasattr(formfield, 'get_limit_choices_to'):
|
||||||
|
limit_choices_to = formfield.get_limit_choices_to()
|
||||||
|
if limit_choices_to is not None:
|
||||||
|
formfield.queryset = formfield.queryset.complex_filter(limit_choices_to)
|
||||||
field_list.append((f.name, formfield))
|
field_list.append((f.name, formfield))
|
||||||
else:
|
else:
|
||||||
ignored.append(f.name)
|
ignored.append(f.name)
|
||||||
|
@ -291,13 +296,6 @@ class BaseModelForm(BaseForm):
|
||||||
data, files, auto_id, prefix, object_data, error_class,
|
data, files, auto_id, prefix, object_data, error_class,
|
||||||
label_suffix, empty_permitted, use_required_attribute=use_required_attribute,
|
label_suffix, empty_permitted, use_required_attribute=use_required_attribute,
|
||||||
)
|
)
|
||||||
# Apply ``limit_choices_to`` to each field.
|
|
||||||
for field_name in self.fields:
|
|
||||||
formfield = self.fields[field_name]
|
|
||||||
if hasattr(formfield, 'queryset') and hasattr(formfield, 'get_limit_choices_to'):
|
|
||||||
limit_choices_to = formfield.get_limit_choices_to()
|
|
||||||
if limit_choices_to is not None:
|
|
||||||
formfield.queryset = formfield.queryset.complex_filter(limit_choices_to)
|
|
||||||
|
|
||||||
def _get_validation_exclusions(self):
|
def _get_validation_exclusions(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -2854,6 +2854,10 @@ class LimitChoicesToTest(TestCase):
|
||||||
f = StumpJokeWithCustomFieldForm()
|
f = StumpJokeWithCustomFieldForm()
|
||||||
self.assertEqual(f.fields['custom'].queryset, 42)
|
self.assertEqual(f.fields['custom'].queryset, 42)
|
||||||
|
|
||||||
|
def test_fields_for_model_applies_limit_choices_to(self):
|
||||||
|
fields = fields_for_model(StumpJoke, ['has_fooled_today'])
|
||||||
|
self.assertSequenceEqual(fields['has_fooled_today'].queryset, [self.threepwood])
|
||||||
|
|
||||||
|
|
||||||
class FormFieldCallbackTests(SimpleTestCase):
|
class FormFieldCallbackTests(SimpleTestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue