Lazy ForeignKey references break in upgrade from 1.9 to 1.10

32 views
Skip to first unread message

James

unread,
Mar 11, 2019, 1:03:17 PM3/11/19
to Django users
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


Reply all
Reply to author
Forward
0 new messages