gpt4 book ai didi

python - Django:扩展其他应用程序的模型

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:59 25 4
gpt4 key购买 nike

我正在 Django 上开发一个类似 ERP 的小型项目,其中包含不同的应用程序(产品、销售、采购、会计、MRP,...)。其中一些具有依赖项(例如,销售应用程序需要产品应用程序)。

为了模块化和松散耦合,我试图保持应用程序尽可能独立。但是,如果应用程序可以在其依赖项模型中扩展(添加新字段)表(例如,Sales 将在其中一个表中添加 can_be_sold BooleanField),那么这将非常有用,并使事情变得更简单。产品范围内的表(如果已安装)。

这样,当用户在内部选择安装应用程序时,就会在数据库中进行所需的更改,以便其与依赖项正确集成。用户只安装他需要的应用程序,而不必在依赖项中预先提供不必要或不相关的信息。

我想过与依赖项建立一对一的关系,但这个解决方案并不能说服我,因为(a)为可能一两个额外的字段创建这么多新表似乎不是很有效, (b) 使用表单和信号会很麻烦(如果安装了许多应用程序,则代码更难维护,总体模块化程度降低)。

继承或抽象类似乎也不合适,因为我不想为子产品创建模型,而是在表中的现有信息(条目)上进行增长或扩展。

实现这一目标的最佳方法是什么?我应该考虑编写自定义迁移操作吗?否则,还有更好的方法吗?谢谢!

最佳答案

我建议您创建一个数据库表来保存所有可能的注册模块和类。所以你可以将它用作 eval 语句中的变量 python 代码。如果您有预定义的方法名称,在下面的方法中我将其称为 common_method。

你甚至不需要有一个抽象类

my_evaluated_code = 'from '+mymodule_var_name + ' import ' + myclass_var_name +' as custommodule'
eval(my_evaluated_code)
custommodule.common_method()

关于python - Django:扩展其他应用程序的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com