summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2016-06-07 13:55:27 +0500
committerTim Graham <timograham@gmail.com>2016-06-09 10:19:09 -0400
commit21130ce1a9c4fcbfce4c614be9e5408b43092bf0 (patch)
tree9e4a89131523daf9a3409aff1cc485f36da631d2 /django
parentf6681393d3f53a67b4e0645e8d02f95579d8ae2d (diff)
Fixed #26718 -- Added system check for existence of the fields specified by ForeignKey.to_field.
Diffstat (limited to 'django')
-rw-r--r--django/db/models/fields/related.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 44e053847a..7caba63c3e 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -463,9 +463,32 @@ class ForeignObject(RelatedField):
def check(self, **kwargs):
errors = super(ForeignObject, self).check(**kwargs)
+ errors.extend(self._check_to_fields_exist())
errors.extend(self._check_unique_target())
return errors
+ def _check_to_fields_exist(self):
+ # Skip nonexistent models.
+ if isinstance(self.remote_field.model, six.string_types):
+ return []
+
+ errors = []
+ for to_field in self.to_fields:
+ if to_field:
+ try:
+ self.remote_field.model._meta.get_field(to_field)
+ except exceptions.FieldDoesNotExist:
+ errors.append(
+ checks.Error(
+ "The to_field '%s' doesn't exist on the related "
+ "model '%s'."
+ % (to_field, self.remote_field.model._meta.label),
+ obj=self,
+ id='fields.E312',
+ )
+ )
+ return errors
+
def _check_unique_target(self):
rel_is_string = isinstance(self.remote_field.model, six.string_types)
if rel_is_string or not self.requires_unique_target: