【问题标题】:ValueError in Django when running the "python manage.py migrate" command运行“python manage.py migrate”命令时 Django 中的 ValueError
【发布时间】:2017-03-06 10:59:35
【问题描述】:

我需要向 Django 的 User 模型添加更多字段,因此我在名为 accounts 的应用中创建了一个自定义模型类(名为 Accounts) ) 扩展了 Django 的 AbstractUser 类。

之后,我更新了我的 settings.py 文件,定义了 AUTH_USER_MODEL 属性

AUTH_USER_MODEL = 'accounts.Accounts'

然后我使用python manage.py makemigrations 命令为自定义模型创建了一个迁移文件。

之后,我运行python manage.py migrate 命令并收到以下错误消息:

ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'accounts.accounts', but app 'accounts' isn't installed.

错误的原因是什么,我该如何解决?

更新: 现在,如果我运行python manage.py makemigrations 命令,我会收到以下错误消息:

ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'accounts.accounts', but app 'accounts' doesn't provide model 'accounts'.

【问题讨论】:

  • INSTALLED_APPS 中有 accounts 包吗?
  • @koniiiik,这就是我在INSTALLED_APPS 中的内容: INSTALLED_APPS = [ 'accounts.apps.AccountsConfig', 'inyavic.apps.InyavicConfig', 'django.contrib.admin', 'django .contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',]
  • 在这种情况下,恐怕我们必须查看完整的回溯才能进一步提供帮助。只需将其添加到您的问题中(您也可以在此处列出 INSTALLED_APPS 以使其更易于阅读)。

标签: django django-models django-migrations django-users


【解决方案1】:

您没有将 accounts 添加到您的 INSTALLED_APPS。从评论中,我可以在您的应用列表中看到accounts.apps.AccountsConfig。而不是它,只需将accounts 添加到您的 INSTALLED_APPS

【讨论】:

    【解决方案2】:

    您只需删除迁移文件夹中以前的 0001_initial.py 并尝试执行 makemigration 并再次迁移

    【讨论】:

    • 解决方案是自己进行迁移。简单地删除迁移并重新创建迁移将在您的数据库中留下原始用户模型的垃圾 - 即,对生产系统不利。所以弄清楚什么是可以接受的。如果您不需要任何当前数据,那么完全核对您的数据库和迁移并从头开始重建。如果您仍在迁移 0001,那么这可能没问题。但是,如果您需要保留数据,那么请弄清楚如何手动进行。我们无法从这篇文章中知道是否有任何 User 行需要保留在 Accounts 中。
    • tldr:这似乎源于更改核心用户模型会破坏迁移系统。因此,您需要了解迁移在理想情况下会为您完成什么并手动完成。
    • 要补充一点,请注意,如果您在不同的应用程序中进行模型更改,并删除迁移以再次尝试进行迁移,则可能已经在两个应用程序中创建了迁移文件。我收到错误是因为我删除了 app1/migrations 中的 0001_initial.py,但没有从 app2/migrations 中删除 0121_somemigrations.py。然后我运行“python manage.py makemigrations”并得到了这个错误。在我删除 0121_somemigrations.py 后,一切都恢复正常了。
    【解决方案3】:

    这只是因为我认为您已经有一个默认用户模型的实例。开始一个新项目并再次迁移您的模型,它应该可以工作。

    【讨论】:

    • 当我在项目中间的某个地方遇到这个问题时,我该如何开始一个新项目,因为 2 年以来一切正常!!
    【解决方案4】:

    我也有类似的问题。它是具有缓存和迁移历史记录的管理应用程序。我通过删除所有缓存和迁移历史记录(pycache 文件和 0001.initial 等,仅保留 init.py)来解决它 YouProject\lib\site-packages\django\contrib\admin\migrations

    【讨论】:

      【解决方案5】:

      当我更改我的一个应用程序的名称时,我也遇到了类似的问题,我不得不删除两个位置的迁移文件,特定应用程序迁移文件夹的所有迁移,然后迁移到“Your-project-env/lib /python3.5/site-packages/django/contrib/admin/migrations”。

      【讨论】:

        【解决方案6】:

        我也有同样的问题。 在models.py你的类下看,把app_label改成你应用的名字,我把类的名字放上去,然后就报错了。这样做我认为它可以解决错误。

        class Meta:
                app_label = 'put_app_name'
        

        抱歉,有些语法错误,我正在使用谷歌翻译。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-23
          • 1970-01-01
          • 2016-07-21
          • 2019-11-11
          • 1970-01-01
          相关资源
          最近更新 更多