diff options
| author | Sergey Fedoseev <fedoseev.sergey@gmail.com> | 2016-06-07 13:55:27 +0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-06-09 10:19:09 -0400 |
| commit | 21130ce1a9c4fcbfce4c614be9e5408b43092bf0 (patch) | |
| tree | 9e4a89131523daf9a3409aff1cc485f36da631d2 /django | |
| parent | f6681393d3f53a67b4e0645e8d02f95579d8ae2d (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.py | 23 |
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: |
