依赖于没有迁移的应用程序:Django 中的 %s" % key[0])

Posted

技术标签:

【中文标题】依赖于没有迁移的应用程序:Django 中的 %s" % key[0])【英文标题】:Dependency on app with no migrations: %s" % key[0]) in the Django 【发布时间】: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.clas-s-room',
]

我认为问题出在以下行:

AUTH_USER_MODEL = 'clas-s-room.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: clas-s-room

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

AUTH_USER_MODEL = 'backend.clas-s-room.User'

【问题讨论】:

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

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

$ python manage.py makemigrations clas-s-room

【讨论】:

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

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

INSTALLED_APPS = [
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    django.contrib.humanize,
    crispy_forms
    clas-s-room,
]

AUTH_USER_MODEL = clas-s-room.User #clas-s-room is app while User is the model

【讨论】:

以上是关于依赖于没有迁移的应用程序:Django 中的 %s" % key[0])的主要内容,如果未能解决你的问题,请参考以下文章

从旧模块中删除依赖于自定义字段的 Django 迁移

Django InconsistentMigrationHistory:迁移 X 在其依赖于数据库“默认”之前应用 Y

django 可重用应用程序:删除迁移中的依赖项?

压缩 Django 迁移时的循环依赖

Django pymssql 迁移

ValueError:依赖于没有迁移的应用程序:帐户