我一直在编写一个可以进行pip安装的新Django包。我已经被困了一段时间,因为我不确定如何为我的特定包进行迁移,以便允许安装的正常工作流程:
python manage.py migrate
目前,我的包看起来像这样:
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
,这是不理想的。
有关如何在用户安装之前对迁移进行排序的任何想法都非常好。
答案 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项目来解决了这个问题,然后如果您使用项目的makemigrations
和manage.py
运行settings.py
,它将神奇地创建也可以在您的软件包migrations
文件夹中进行迁移!