Django 迁移没有迁移 authtoken 和会话
Posted
技术标签:
【中文标题】Django 迁移没有迁移 authtoken 和会话【英文标题】:Django migration didn't migrate authtoken and sessions 【发布时间】:2019-12-24 19:29:57 【问题描述】:在运行 python manage.py migrate
时,并非所有迁移都运行,特别是 django_celery_results
、authtoken
和 sessions
。这导致与应用程序相关的迁移出错。
但是,如果我首先手动迁移这三个,然后专门迁移 auth
(不知道为什么我需要再次迁移它),然后执行 python manage.py migrate
,它会起作用。
Django上安装的应用是这样的:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'django_celery_results',
'celery.contrib.testing.tasks',
'api_app'
]
我想知道为什么会这样,我认为migrate
将运行“要执行的操作”中列出的所有迁移。
【问题讨论】:
相关问题在这里:***.com/questions/38982290/… 请不要发布截图错误。复制并粘贴文本。 如果api_app
的迁移没有首先失败,它将运行authtoken
和sessions
的迁移。如果您的 api_app
依赖于 authtoken
和 sessions
迁移,那么您应该将该依赖添加到您的第一个迁移中,以便 django 知道它应该首先运行哪些。改变你的依赖。否则,如您所见,对于两个不相关的应用程序,它将按字母顺序运行迁移。 admin__0001
依赖于 auth__0001
,这就是为什么它首先运行那个(但还不是另一个 auth
迁移)。
【参考方案1】:
您的api_app.0002
迁移会在未设置last_login
的情况下创建用户。因此,此迁移必须在允许此列中为空的 auth 0005 迁移之后运行。
如果您在迁移中添加dependency,那么 Django 会以正确的顺序运行它们。
class Migration(migrations.Migration):
dependencies = [('auth', '0005_alter_user_last_login_null')]
【讨论】:
以上是关于Django 迁移没有迁移 authtoken 和会话的主要内容,如果未能解决你的问题,请参考以下文章