【问题标题】:Dependency on app with no migrations: %s" % key[0]) in the Django依赖于没有迁移的应用程序:Django 中的 %s" % key[0])
【发布时间】:2019-07-27 06:59:06
【问题描述】:

我需要创建自定义用户。我正在使用带有 AbstractUser 的用户模型:

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.html import escape, mark_safe


class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

settings.py:

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',

    'crispy_forms',

    'backend.classroom',
]

我认为问题出在以下行:

AUTH_USER_MODEL = 'classroom.User'

错误:

File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 82, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in __init__
    self.build_graph()
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/loader.py", line 226, in build_graph
    self.add_external_dependencies(key, migration)
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/loader.py", line 191, in add_external_dependencies
    parent = self.check_key(parent, key[0])
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/loader.py", line 173, in check_key
    raise ValueError("Dependency on app with no migrations: %s" % key[0])
ValueError: Dependency on app with no migrations: classroom

obs:app classrom 应用程序位于后端文件夹中。我也尝试了以下代码:

AUTH_USER_MODEL = 'backend.classroom.User'

【问题讨论】:

  • 你是makemigrationsmigrate吗?
  • 是的,如果你的应用是“backend.classroom”,那么模型就是“backend.classroom.User”
  • 假设应用程序实际上是classroom,并且有后端和前端目录,一个用于 Django 应用程序,一个用于任何前端代码。
  • 您是否正在对已有用户模型的现有应用进行此更改?
  • 是的,但是会显示错误并且 AUTH_USER_MODEL = 'backend.classroom.User'

标签: python django django-models


【解决方案1】:

尝试为classroom 应用程序创建初始迁移,然后将其声明为AUTH_USER_MODEL,因为通常依赖于auth.User 的任何东西现在都依赖于classroom.User

$ python manage.py makemigrations classroom

【讨论】:

  • 引用 Django 文档:“不要忘记将 AUTH_USER_MODEL 指向它。创建任何迁移或第一次运行 manage.py migrate 之前执行此操作。”在设置 AUTH_USER_MODEL 之前运行迁移会很麻烦,因为这会创建带有错误模型的 User 表。 makemigrations 命令无关紧要,但在现有应用程序isn't a straightforward undertaking 中添加自定义用户模型。
  • 说得好,@dirkgroten。我实际上在这里有一个与这种情况相关的答案,因为我不得不和自己争吵......stackoverflow.com/questions/47059198/…
  • 我希望 OP 是一个新项目,而不是现有项目 :-) 但我之前没见过 migrations.SeparateDatabaseAndState 的把戏,很酷。
【解决方案2】:

我认为您的错误是在应用安装上? 您将课堂作为应用程序吗?和项目的后端?如果是这样,那么正确 配置 所以安装应用程序应该是

INSTALLED_APPS = [
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    django.contrib.humanize,
    crispy_forms
    classroom,
]

AUTH_USER_MODEL = classroom.User #classroom is app while User is the model

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2017-10-07
    • 2020-10-20
    • 2016-04-14
    • 2023-04-06
    • 2018-10-19
    • 2014-12-29
    • 2020-07-30
    相关资源
    最近更新 更多