Hey everyone,
While upgrading from 1.9 to 1.10, I got errors that lazy ForeignKey references cannot be resolved similar to the following (full stack trace is included below):
ValueError: Related model 'appname.ModelName' cannot be resolved
This occurs with anything from simple models to abstract models, referencing other models within the same app, other apps, and recursive relationships ('self').
In searching, I've found similar issues relating to migrations, however this happens when I call manage.py "runserver" or "shell". I haven't run or defined any migrations in 1.10 yet.
Full stack trace (using Django 1.10; directories and the app name have been obfuscated from the original)
Note: This error references a model using an abstract model, but as stated above this is just one instance where it doesn't work. If I were to temporarily comment out the field, it would just error out with the next one.
user@host:/pwd$ python manage.py shell
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 341, in execute
django.setup()
File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/usr/local/lib/python2.7/site-packages/django/apps/config.py", line 199, in import_models
self.models_module = import_module(models_module_name)
File "/usr/local/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/pwd/app/models.py", line 482, in <module>
class Employee(EmployeeDatedFieldsAbstractModel, AbstractBaseUser, PermissionsMixin):
File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py", line 309, in __new__
new_class._prepare()
File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py", line 349, in _prepare
if not opts.managers or cls._requires_legacy_default_manager():
File "/usr/local/lib/python2.7/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/usr/local/lib/python2.7/site-packages/django/db/models/options.py", line 374, in managers
manager = copy.copy(manager)
File "/usr/local/lib/python2.7/copy.py", line 88, in copy
rv = reductor(2)
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 208, in __getstate__
self._fetch_all()
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 1085, in _fetch_all
self._result_cache = list(self.iterator())
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 54, in __iter__
results = compiler.execute_sql()
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 824, in execute_sql
sql, params = self.as_sql()
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 369, in as_sql
extra_select, order_by, group_by = self.pre_sql_setup()
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 46, in pre_sql_setup
self.setup_query()
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 37, in setup_query
self.select, self.klass_info, self.annotation_col_map = self.get_select()
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 194, in get_select
for c in self.get_default_columns():
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 516, in get_default_columns
column = field.get_col(alias)
File "/usr/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 954, in get_col
return super(ForeignKey, self).get_col(alias, output_field or self.target_field)
File "/usr/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 855, in target_field
return self.foreign_related_fields[0]
File "/usr/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 595, in foreign_related_fields
return tuple(rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field)
File "/usr/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 582, in related_fields
self._related_fields = self.resolve_related_fields()
File "/usr/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 567, in resolve_related_fields
raise ValueError('Related model %r cannot be resolved' % self.remote_field.model)
ValueError: Related model 'app.Department' cannot be resolved