如何解决创建包时,如何管理弱依赖项的迁移?
我有一个 Django 应用程序,我想通过 Pipy 打包并提供给社区。它唯一强烈的依赖是Django。它还与 Django CMS 很好地集成,并为 Django CMS 提供了额外的集成。我计划仅向安装了 Django CMS 的项目提供此附加功能。 (这就是我所说的弱依赖 - 没有它也能安装和工作,但使用它甚至会很痛苦。)具体来说,某些模型仅在来自 Django 的基本模型 CMSPlugin
时才定义CMS 已安装。
有没有好的/正确的方法来管理迁移?
我不能在包中包含依赖于 CMSPlugin
的模型迁移,因为没有 Django CMS 安装的用户将无法运行它。
如果我根据 CMSPlugin
用户省略迁移,Django CMS 将在第一次安装时创建它们。但是,我担心在每次更新包时,当包被覆盖时,这些迁移都会在 pip install upgrade
上丢失。
解决方法
由于这些模型不一定在您的包中使用,因此最好将它们放在另一个 Django 应用程序中,该应用程序可以是您应用程序的子应用程序,也可能只是您包中的一个应用程序。如果用户已经安装了 CMSPlugin
,那么他们现在可以简单地将您的这个额外应用添加到 INSTALLED_APPS
列表中以使用它,这也带来了好处,您的用户现在可以选择使用它或不是。
通过这种方式,您还可以使用应用注册表 is_installed
method [Django docs] 轻松调整您的视图,无论是否安装了此应用:
from django.apps import apps
def some_view(request):
if apps.is_installed('yourpackage.path.to.weak_dependency_subapp'):
# Weak dependency is present
else:
# Weak dependency is absent
注意:你必须小心,如果你没有安装这个应用模型,你就不要导入它,否则它可能会给你一些错误,因为它不会被加载。 >
编辑:要制作子应用程序,您可以通过 cd 到应用程序目录和 python ../manage.py startapp subappname
或直接 python manage.py startapp subappname <your_app>/subappname
(目录 subappname需要先创建),然后将其应用配置的 name
属性设置为 <your_app>.subappname
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。