依赖于没有迁移的应用程序: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'
【问题讨论】:
你是makemigrations
和migrate
吗?
是的,如果你的应用是“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])的主要内容,如果未能解决你的问题,请参考以下文章