【问题标题】:Skip a list of migrations in Django跳过 Django 中的迁移列表
【发布时间】:2017-02-14 21:35:15
【问题描述】:

我在第三方应用程序中有迁移0001_something0002_something0003_something,它们都由我自己的应用程序应用于数据库。我只是想跳过这三个迁移。一种选择是运行以下命令

python manage.py migrate <third_party_app_name> 0003 --fake

但我不想手动运行此命令。我在想是否可以通过任何方法在设置中指定某些内容以跳过这些迁移。我只需运行python manage.py migrate,它就会自动识别出需要伪造 3 个迁移。或者如果有任何方法总是伪造000100020003

如果这是在我自己的应用程序中,我可以简单地删除迁移文件,但它是通过安装的第三方应用程序。 pip 我不想改变它。

【问题讨论】:

  • python manage.py migrate <third_party_app_name> --fake 跳过所有迁移?
  • @itzmeontv 可以的。但正如我指定的,我不想手动运行迁移。我正在查看运行python manage.py migrate 是否会自动识别需要迁移三个迁移。

标签: python django django-models django-migrations


【解决方案1】:

如果你真的想这样做。试试

  • django_migrations 表中添加条目

    app                 name                         applied
    <thirdpartyname>    003_something #without .py   2014-04-16 14:12:30.839899+08 #some date before now
    

【讨论】:

    【解决方案2】:

    MIGRATION_MODULES 设置可让您为应用的迁移指定替代模块。您可以为您的应用设置此项,然后省略您希望跳过的迁移,或用空迁移替换它们。

    【讨论】:

    • 这真的很有用。这可以忽略应用程序中的所有迁移。有什么方法可以指定忽略哪些迁移?
    • 不,这种方法不允许您指定要忽略的迁移。您可以在项目中创建一个迁移目录,从应用程序中复制您希望使用的迁移,并删除您不想要的迁移。然后使用 MIGRATION_MODULES 设置,以便 Django 使用您的迁移模块。
    • 这看起来是最好的方法。我已经复制了迁移并将其放入我自己的应用程序中。我只是想包含新的迁移,以防应用中的更新创建新的迁移。
    • 无法自动将新迁移从应用复制到迁移模块。你必须自己管理。
    【解决方案3】:

    django 仅通过迁移历史表知道应用的迁移。所以如果没有应用迁移的记录,它会认为这个迁移没有应用。 Django 不会根据迁移文件检查真实的数据库状态。

    【讨论】:

    • 这是我在问题中指定的相同代码。如果可能的话,我想简单地避免这种情况。
    • @SudipKafle 这个答案的要点是。这不可能。因为 django 了解迁移的唯一方法是通过 django_migrations 表。
    猜你喜欢
    • 2020-11-07
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2016-05-09
    • 2015-09-30
    • 2021-03-21
    • 2012-02-07
    相关资源
    最近更新 更多