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

时间:2016-09-30 02:02:50

标签: python django django-models django-migrations django-apps

我正在研究Django上的小型ERP项目,它包含不同的应用程序(产品,销售,采购,会计,MRP ......)。其中一些具有依赖性(例如,Sales应用程序需要Products应用程序)。

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

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

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

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

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

1 个答案:

答案 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
      }
   ]
}