ValueError: 字段 admin.LogEntry.user 是用惰性引用声明的

Hod*_*ubo 9 python migration django

我正在开发一个新的 Django 项目并坚持迁移。

我想做一个 UserModel,为了做到这一点,到目前为止我做了两件事。1.我制作了AuthUser模型并在下面的类中设置了一个Meta类。

models.py中

class AuthUser(AbstractUser):
    user_type_id = models.PositiveIntegerField(choices=UserTypes.choices())
    user_id = models.PositiveIntegerField()

    class Meta(AbstractUser.Meta):
        swappable = 'AUTH_USER_MODEL'

    @property
    def user_type(self):
        return UserTypes(self.user_type_id)

    def original_orm(self):
        if self.user_type.value == UserTypes.raijosha.value:
            return RaijoshaUsers.objects.filter(id=self.user_id).first()
        elif self.user_type.value == UserTypes.shuttennsha.value:
            return Users.objects.filter(id=self.user_id).first()
Run Code Online (Sandbox Code Playgroud)
  1. 在 settings.py 中,我设置了 AUTH_USER_MODEL。

    AUTH_USER_MODEL = 'recommend.AuthUser'

这是错误代码。

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, recommend, recommend_raijousha, sessions
Traceback (most recent call last):
  File "manage.py", line 25, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/commands/migrate.py", line 164, in handle
    pre_migrate_apps = pre_migrate_state.apps
  File "/usr/local/lib/python3.6/dist-packages/django/utils/functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.6/dist-packages/django/db/migrations/state.py", line 218, in apps
    return StateApps(self.real_apps, self.models)
  File "/usr/local/lib/python3.6/dist-packages/django/db/migrations/state.py", line 295, in __init__
    raise ValueError("\n".join(error.msg for error in errors))
ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'recommend.authuser', but app 'recommend' doesn't provide model 'authuser'.
Run Code Online (Sandbox Code Playgroud)

你能帮助我们或给我一个建议。

  Applying admin.0001_initial...Traceback (most recent call last):
  File "manage.py", line 25, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/commands/migrate.py", line 204, in handle
    fake_initial=fake_initial,
  File "/usr/local/lib/python3.6/dist-packages/django/db/migrations/executor.py", line 115, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.6/dist-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/usr/local/lib/python3.6/dist-packages/django/db/migrations/executor.py", line 244, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/usr/local/lib/python3.6/dist-packages/django/db/migrations/migration.py", line 129, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/usr/local/lib/python3.6/dist-packages/django/db/migrations/operations/models.py", line 97, in database_forwards
    schema_editor.create_model(model)
  File "/usr/local/lib/python3.6/dist-packages/django/db/backends/base/schema.py", line 254, in create_model
    definition, extra_params = self.column_sql(model, field)
  File "/usr/local/lib/python3.6/dist-packages/django/db/backends/base/schema.py", line 144, in column_sql
    db_params = field.db_parameters(connection=self.connection)
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related.py", line 994, in db_parameters
    return {"type": self.db_type(connection), "check": self.db_check(connection)}
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related.py", line 991, in db_type
    return self.target_field.rel_db_type(connection=connection)
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related.py", line 909, in target_field
    return self.foreign_related_fields[0]
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related.py", line 653, in foreign_related_fields
    return tuple(rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field)
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related.py", line 640, in related_fields
    self._related_fields = self.resolve_related_fields()
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related.py", line 625, in resolve_related_fields
    raise ValueError('Related model %r cannot be resolved' % self.remote_field.model)
ValueError: Related model 'recommend.authuser' cannot be resolved
Run Code Online (Sandbox Code Playgroud)

考虑到建议,我确实删除了迁移文件。但是上面显示了另一个错误。

sha*_*ooo 15

它发生,如果你跑了默认auth的应用程序迁移和后来改变了AUTH_USER_MODELsettings.py。您可以尝试以下操作:

# comment AUTH_USER_MODEL in settings.py so it points to default User model

python manage.py migrate auth zero

# uncomment to be AUTH_USER_MODEL='recommend.AuthUser'

python manage.py migrate auth
Run Code Online (Sandbox Code Playgroud)

  • 最好也评论模型本身。然后完成上述两步后,取消注释并运行最后一次“migrate”。 (8认同)
  • 这应该是有效的答案,而不是删除数据库和迁移文件。 (2认同)
  • 就我而言,我收到错误:“auth.User.groups:(fields.E304)“auth.User.groups”的反向访问器“Group.user_set”与“website.User.groups”的反向访问器冲突。” 运行第一个命令时。只需添加一个 --skip-checks 即可全部解决。;) (2认同)

Hod*_*ubo 10

我删除了所有迁移文件和数据库并应用了它。

那我就可以移民了。

  • 哈哈,这个疯狂的操作对我有用。删除所有表和迁移文件,然后重新创建迁移并应用。仅适用于早期开发阶段的项目,没有认真的数据。不要在你的生产项目上尝试这个。 (2认同)
  • 对我来说,只删除迁移文件就足够了。没有必要删除所有表。谢谢你! (2认同)

小智 8

注意:我使用 sqlite3 作为数据库。

您好,我通过删除migrations文件夹中除该文件之外的所有迁移文件轻松解决了这个问题__init__.py。并且还删除db.sqlite3. 现在运行以下命令:python manage.py makemigrations 然后python manage.py migrate。现在您必须再次创建超级用户,因此只需键入以下命令:python manage.py createsuperuser。然后它会提示输入用户名、电子邮件和密码,因此输入您的凭据,一切将再次继续正常工作,我希望这会有所帮助。

单击此处查看图像

  • 我尝试了许多其他选择。这对我有用。以分步格式总结: 1) 除了 __init__.py 之外,删除所有迁移。(我错过了这一步) 2) 删除 db.sqlite3 3) 运行以下命令: python manage.py makemigrations 然后 python manage.py migrate 4) 再次创建超级用户 (2认同)