Django迁移错误地应用

     2023-02-24     296

关键词:

【中文标题】Django迁移错误地应用【英文标题】:Django migrations wrongly applying 【发布时间】:2021-02-06 23:31:45 【问题描述】:

基本问题

我正在开发一个 django 项目,我在其中使用多个数据库和一个自定义路由器。 因此,django 应该知道哪个数据库用于哪个应用程序。

现在我遇到了一些我认为奇怪的行为,并想问是否有人知道这是否是正确的行为,特别是因为 github page 似乎没有问题跟踪器。

为了说明这一点,我使用了一个极端的例子,但我还是尝试了。出于测试目的,我将allow_migrate 函数设置为只返回False。 我确实创建了一个自定义路由器,它覆盖了allow_migrate 函数,我还在DATABASE_ROUTERS 设置下注册了它。 allow_migrate 函数也被调用,因为我用一些 print 语句检查了它。

我如何理解路由器的使用情况

按照我对using multiple databases with a custom router 文档的理解,allow_migration 方法指定是否要对当前的dbapp_labelmodel_name 应用迁移。 如果返回True,则应用迁移,如果返回False,则“静默跳过”,因此不应用。

我的预期

由于我一直将allow_migrate 函数设置为返回False,因此我预计不会应用任何尚未应用的迁移。

实际发生的情况

正如文档所述,迁移确实“默默地跳过”,但表 django_migrations 仍然填充了尚未应用的迁移。

为什么这是个问题

因此,如果我在 allow_migrate 函数中有实际逻辑,即使未正确应用迁移,例如因为该数据库正在针对不应存储在该数据库中的特定应用程序进行测试,所以该数据库的django_migrations 表正在填充错误数据。

那么,这是想要的行为吗?我只是使用函数allow_migrate 错误,实际上应该使用其他东西吗?

如果相关,我使用django version 3.1.2,我的数据库是mariadb 数据库。

【问题讨论】:

【参考方案1】:

我有点明白所描述的问题是如何真正需要的。

似乎对于django 知道的每个数据库,它都将使用makemigrations 创建的迁移写入django_migrations 表,即使它实际上并未应用迁移。 因此,它会跟踪每次新创建的迁移,并且只考虑未存储在django_migrations 表中的迁移。

再次说明:在任何情况下,无论是否应用迁移,都会将其写入django_migrations 表中。是否实际应用迁移仅由我提到的allow_migrate 函数决定。但是,除了查看该数据库中已更改的表之外,没有任何线索是否确实应用了迁移。

我建议,django 应该在控制台中这样说,或者只是在django_migrations 中添加一个字段applied。也许我会为此准备一个拉取请求。

【讨论】:

Django 如何摆脱迁移错误

】Django如何摆脱迁移错误【英文标题】:DjangoHowtoGetridofMigrationErrors【发布时间】:2019-05-2323:59:29【问题描述】:我正在使用Django;当我更改模型时,每次都会出错。我只更改模型中的一个字段,并且愚蠢地出现很多错误每次。dj... 查看详情

不能再在 Django 中删除数据库并重新应用迁移?

】不能再在Django中删除数据库并重新应用迁移?【英文标题】:CannolongerdropdatabaseandreapplymigrationsinDjango?【发布时间】:2020-06-2219:08:02【问题描述】:在多次编写我的应用程序时,我不得不删除我的数据库并重新运行我的迁移。... 查看详情

陷入 django 南迁移 - TransactionManagement 错误

】陷入django南迁移-TransactionManagement错误【英文标题】:Stuckinadjangosouthmigration-TransactionManagementerror【发布时间】:2013-08-2819:41:39【问题描述】:我在应用django南迁移时遇到问题:和往常一样,我在模式迁移成功后执行了migrate命令... 查看详情

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

】django:应用程序x中的迁移x没有迁移类【英文标题】:django:migrationxinappxhasnoMigrationclass【发布时间】:2016-03-1703:14:04【问题描述】:这是确切的错误django.db.migrations.loader.BadMigrationError:Migration0001_initialinappdjango_commentshasnoMigrationcl... 查看详情

迁移后django静态文件404错误

】迁移后django静态文件404错误【英文标题】:djangostaticfiles404erroraftermigration【发布时间】:2020-05-0706:07:29【问题描述】:静态文件夹路径正确,迁移前一切正常。index.html%加载静态文件%我的第一个Django应用somthin正文>【参考方... 查看详情

Django CommandError:应用程序“民意调查”有迁移

】DjangoCommandError:应用程序“民意调查”有迁移【英文标题】:DjangoCommandError:App\'polls\'hasmigrations【发布时间】:2014-08-0414:02:13【问题描述】:尝试按照Djangoproject的教程进行操作。我遇到的问题是执行命令时:pythonmanage.pysqlpolls... 查看详情

Django 1.9 迁移问题

】Django1.9迁移问题【英文标题】:Django1.9MigrationProblems【发布时间】:2016-07-2901:46:33【问题描述】:我正在尝试将我的1.8应用程序转换为Django1.9。简单地为旧数据库创建迁移就可以了,但是当我尝试使用migrate创建一个新数据库时... 查看详情

更改应用程序名称和数据库表后 Django 无法进行迁移

】更改应用程序名称和数据库表后Django无法进行迁移【英文标题】:Djangocan\'tmakemigrationsafterchangingappnameanddbtables【发布时间】:2018-06-1307:47:45【问题描述】:我正在使用Django1.11.5并使用PyCharm作为我的IDE。我一直在尝试将我的应... 查看详情

Django 迁移错误:字段“名称”没有默认值

】Django迁移错误:字段“名称”没有默认值【英文标题】:Djangomigrationerror:Field\'name\'doesn\'thaveadefaultvalue【发布时间】:2019-07-2704:36:18【问题描述】:我有一个最近从1.4.5升级到1.11.16的Django应用程序。它在旧版本的debianlinux上运... 查看详情

SQLite 工作,但 PostgreSQL 迁移数据库导致错误 - Django 3.0

】SQLite工作,但PostgreSQL迁移数据库导致错误-Django3.0【英文标题】:SQLiteworks,butPostgreSQLmigrateddatabasecausesERROR-Django3.0【发布时间】:2020-07-1611:25:32【问题描述】:情况我已经用几个应用程序构建了Django3.0、PostgreSQL11、macOS项目。我... 查看详情

Django manage.py:在其依赖之前应用迁移

】Djangomanage.py:在其依赖之前应用迁移【英文标题】:Djangomanage.py:Migrationappliedbeforeitsdependency【发布时间】:2016-12-2402:37:43【问题描述】:运行pythonmanage.pymigrate时遇到这个错误:django.db.migrations.exceptions.InconsistentMigrationHistory:Migr... 查看详情

具有默认值的外键上的 Django 1.7 迁移错误

】具有默认值的外键上的Django1.7迁移错误【英文标题】:Django1.7Migrationerroronforeignkeywithdefaultvalue【发布时间】:2014-11-1922:56:07【问题描述】:我在测试我的应用程序时遇到问题,包括在具有默认值的ForeignKey模型字段上迁移(参... 查看详情

Azure 上的 Django 应用错误地从 Azure Blob 加载静态文件

】Azure上的Django应用错误地从AzureBlob加载静态文件【英文标题】:DjangoapponAzureincorrectlyloadingstaticfilesfromanAzureBlob【发布时间】:2021-12-0108:37:20【问题描述】:此Django应用作为应用服务部署在Azure上,其静态和媒体文件存储在Azure存... 查看详情

如何在heroku中应用特定的django数据库迁移?

】如何在heroku中应用特定的django数据库迁移?【英文标题】:Howtoapplyaparticulardjangodatabasemigrationinheroku?【发布时间】:2015-11-1213:53:48【问题描述】:我上传了修改后的代码,其中对模型进行了一些更改。当我运行herokurunpythonmanage.... 查看详情

南迁移错误:django.contrib.auth 的 NoMigrations 异常

】南迁移错误:django.contrib.auth的NoMigrations异常【英文标题】:Southmigrationerror:NoMigrationsexceptionfordjango.contrib.auth【发布时间】:2011-02-2004:51:03【问题描述】:我在我的项目中使用South已经有一段时间了,但我最近做了大量的开发并... 查看详情

django 2 中的迁移错误; AttributeError:“str”对象没有属性“decode”

】django2中的迁移错误;AttributeError:“str”对象没有属性“decode”【英文标题】:Migrationserrorindjango2;AttributeError:\'str\'objecthasnoattribute\'decode\'【发布时间】:2019-11-1105:42:52【问题描述】:我正在我新建的名为“core”的应用程序上... 查看详情

您如何在非主分支上干净地维护 django 迁移?

】您如何在非主分支上干净地维护django迁移?【英文标题】:Howdoyoucleanlymaintaindjangomigrationsonnon-masterbranch?【发布时间】:2018-09-1300:14:25【问题描述】:想象一下,我有一个进行迁移的分支。这是一个与master保持同步的实验性分... 查看详情

Django 迁移在 Heroku 中失败

】Django迁移在Heroku中失败【英文标题】:Djangomigrationsfailinheroku【发布时间】:2015-06-2606:21:44【问题描述】:我正在尝试将Django(1.8)应用程序部署到Heroku,运行时Python3.4.2。该应用程序成功运行(除了未创建表的事实),但在尝试... 查看详情