我正在研究Django上的小型ERP项目,它包含不同的应用程序(产品,销售,采购,会计,MRP ......)。其中一些具有依赖性(例如,Sales应用程序需要Products应用程序)。
为了模块化和松散耦合,我试图让应用程序尽可能独立。但是,如果应用程序可以在其依赖项的模型中扩展(添加新字段)表,那么它将非常有用并使事情更简单(例如,Sales会在其中一个表中添加can_be_sold
BooleanField。产品范围(如果已安装)。
这样,当用户在内部选择安装应用程序时,会对数据库进行必要的更改,以使其与依赖项正确集成。用户只安装他需要的应用程序,而不必在依赖项中先验地提供不必要或不相关的信息。
我想过与依赖关系建立一对一的关系,但是这个解决方案并不能说服我,因为(a)为一两个额外的字段创建这么多新表似乎不是很有效, (b)处理表格和信号将是一件麻烦事(如果安装了许多应用程序并且整体上降低了模块性,则使代码更难维护)。
继承或抽象类似乎也不合适,因为我不是试图为子产品创建模型,而是扩展或扩展表中的现有信息(条目)。
实现这一目标的最佳方法是什么?我应该考虑编写自定义迁移操作吗?否则,有更好的方法吗?谢谢!
答案 0 :(得分:1)
我建议你创建一个数据库tabel来保存所有可能注册的模块和类。 所以你可以在eval语句中将它用作变量python代码。 如果你有预定义的方法名称,在这种方法中我称之为common_method。
你甚至不需要一个抽象的课程{
"content":[
{
"descripcion":"Giro para carnicer\u00edas",
"nombre":"Carnicer\u00eda",
"id":1
},
{
"descripcion":"Giro para pescader\u00edas",
"nombre":"Pescados",
"id":2
},
{
"descripcion":"Giro para fruter\u00edas\r\n",
"nombre":"Frutas y verduras",
"id":3
},
{
"descripcion":"",
"nombre":"Pollos",
"id":13
},
{
"descripcion":"",
"nombre":"Abarrotes",
"id":14
},
{
"descripcion":"",
"nombre":"Comida",
"id":15
},
{
"descripcion":"",
"nombre":"Ex\u00f3ticos",
"id":16
},
{
"descripcion":"",
"nombre":"Otros",
"id":17
}
]
}