summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/fields.py11
-rw-r--r--django/forms/models.py17
2 files changed, 13 insertions, 15 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 81b3e2f4f9..950f9481a3 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -181,17 +181,6 @@ class Field(six.with_metaclass(RenameFieldMethods, object)):
"""
return {}
- def get_limit_choices_to(self):
- """
- Returns ``limit_choices_to`` for this form field.
-
- If it is a callable, it will be invoked and the result will be
- returned.
- """
- if callable(self.limit_choices_to):
- return self.limit_choices_to()
- return self.limit_choices_to
-
def has_changed(self, initial, data):
"""
Return True if data differs from initial.
diff --git a/django/forms/models.py b/django/forms/models.py
index acb7f91a76..b560ee84a9 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -328,11 +328,9 @@ class BaseModelForm(BaseForm):
# Apply ``limit_choices_to`` to each field.
for field_name in self.fields:
formfield = self.fields[field_name]
- if hasattr(formfield, 'queryset'):
- limit_choices_to = formfield.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:
- if callable(limit_choices_to):
- limit_choices_to = limit_choices_to()
formfield.queryset = formfield.queryset.complex_filter(limit_choices_to)
def _get_validation_exclusions(self):
@@ -1133,6 +1131,17 @@ class ModelChoiceField(ChoiceField):
self.choice_cache = None
self.to_field_name = to_field_name
+ def get_limit_choices_to(self):
+ """
+ Returns ``limit_choices_to`` for this form field.
+
+ If it is a callable, it will be invoked and the result will be
+ returned.
+ """
+ if callable(self.limit_choices_to):
+ return self.limit_choices_to()
+ return self.limit_choices_to
+
def __deepcopy__(self, memo):
result = super(ChoiceField, self).__deepcopy__(memo)
# Need to force a new ModelChoiceIterator to be created, bug #11183