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

mat*_*gan 7 python django django-migrations

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

  1. pip 安装我的包
  2. 将我的包裹添加到您的“INSTALLED_APPS”
  3. 跑 python manage.py migrate

目前,我的包裹是这样的:

package_root/
    dist/
    actual_package/
        __init__.py
        models.py
    setup.py
Run Code Online (Sandbox Code Playgroud)

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

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

man*_*ica 5

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

2 - 包括python manage.py migrate actual_package作为安装过程的一部分 - 无论是新的还是更新的。

3 - 如果您发布对 actual_package 的更新,请包括任何新的迁移。

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

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