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_resultsauthtokensessions。这导致与应用程序相关的迁移出错。

但是,如果我首先手动迁移这三个,然后专门迁移 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 的迁移没有首先失败,它将运行authtokensessions 的迁移。如果您的 api_app 依赖于 authtokensessions 迁移,那么您应该将该依赖添加到您的第一个迁移中,以便 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 和会话的主要内容,如果未能解决你的问题,请参考以下文章

django迁移问题

为还没有任何迁移的 Django 项目创建迁移

django迁移过后没有数据库

django:应用程序 x 中的迁移 x 没有迁移类

django 面试题

重置长时间的 Django 迁移