我如何处理作为Django包维护者的迁移?

时间:2017-08-20 04:34:33

标签: python django django-migrations

我一直在编写一个可以进行pip安装的新Django包。我已经被困了一段时间,因为我不确定如何为我的特定包进行迁移,以便允许安装的正常工作流程:

  1. pip install my package
  2. 将我的包添加到“INSTALLED_APPS”
  3. 运行python manage.py migrate
  4. 目前,我的包看起来像这样:

    package_root/
        dist/
        actual_package/
            __init__.py
            models.py
        setup.py
    

    我面临的问题是,当我打包应用程序并使用pip install dist/...安装它然后将其添加到我的示例应用程序“INSTALLED_APPS”时,运行python manage.py migrate不会为模型创建任何表在actual_package/models.py中,因此我(从用户的角度来看)需要先运行python manage.py makemigrations actual_package,这是不理想的。

    有关如何在用户安装之前对迁移进行排序的任何想法都非常好。

2 个答案:

答案 0 :(得分:2)

1 - 在包中包含初始迁移 - 例如actual_package/migrations/0001_initial.py

2 - 在安装过程中包含python manage.py migrate actual_package - 无论是新的还是更新。

3 - 如果您发布了对actual_package的更新,请包含所有新的迁移。

这适用于新安装和更新。如果迁移已经完成(例如,更新但不包括新的迁移),那么迁移命令不会受到影响。

一个关键警告:确保您的软件包安装检查相应的Django版本。版本和代码之间发生了很多变化 - 对于一个版本的迁移 - 可能不适用于另一个版本。

答案 1 :(得分:0)

阅读评论似乎是一个问题,我们应该如何为程序包中的模型创建迁移文件,即,对于程序包开发人员,python manage.py makemigrations相当于什么。

我通过在/example/的包中包含一个示例django项目来解决了这个问题,然后如果您使用项目的makemigrationsmanage.py运行settings.py,它将神奇地创建也可以在您的软件包migrations文件夹中进行迁移!