如何在我的 virtualenv 中更改依赖应用程序中的模型

How to change a model in a dependency app in my virtualenv

我的 venv 中有一个应用程序,我希望扩展模型,但我真的不想进入 venv 并开始编辑文件。

是否可以在不编辑模型文件本身的情况下扩展模型并向其添加字段。我尝试将它导入其他地方并添加变量,但这没有用,至少最初是这样。

简单地 monkey patching 添加字段的模型是不够的,因为您仍然需要该应用程序为该字段创建数据库迁移以显示在实际中数据库。 (看起来你并不是想纯粹在 Python 级别上添加字段或行为,因为对于那个猴子补丁,或者 @propertyproxy model 会有工作正常)

假设您确实想出了一个 "hack/script/solution" 来迁移数据库,您将在与官方版本不同的版本中使用该应用程序,因此将来您想要升级应用程序版本,您可以运行进入问题。

分叉您自己的版本并将其用作依赖项

因此,如果您不介意从 upstream 官方应用程序中分离*,我会 fork 该应用程序。这意味着我克隆他们的存储库,将我的字段添加到他们 models.py 的模型中,生成数据库迁移,将所有这些提交回存储库。然后我没有安装官方应用程序,而是将我的版本安装到虚拟环境中。 (pip 可以从 Git 安装,例如,您的应用不需要在 PyPI 上)

*谁知道也许应用程序的维护者会接受您的拉取请求并将您的更改放入官方仓库

子class模型

如果适合您,您还可以subclass the original model,添加您想要的字段。因此,您的应用可以使用您创建的 extended class,而原始应用可以使用其原始模型中已经存在的 fields/methods。