Python Django中的抽象基类模型与代理模型

Python Django中的抽象基类模型与代理模型,python,django,django-models,abstract-class,models,Python,Django,Django Models,Abstract Class,Models,我正在构建一个控制面板,它将在Django中有多个子应用程序。我的一个型号是应用程序,它将具有重要的设置,如名称、说明、安装路径和id(这样我就可以将特定设置和配置值关联到此应用程序) 现在,我正在努力弄清楚如何声明这个特定的模型。每个应用程序将执行与其他应用程序完全不同的操作。一个应用程序可以管理特定的CMS设置,另一个应用程序可以为我们的开发环境处理密码重置。目标是在一个地方 每个应用程序的主要信息都是相同的。每个应用程序都有一个名称、描述等。不同之处在于它们的功能和使用的设置。不过,这些设

我正在构建一个控制面板,它将在Django中有多个子应用程序。我的一个型号是
应用程序
,它将具有重要的设置,如
名称
说明
安装路径
id
(这样我就可以将特定设置和配置值关联到此应用程序)

现在,我正在努力弄清楚如何声明这个特定的模型。每个
应用程序
将执行与其他应用程序完全不同的操作。一个应用程序可以管理特定的CMS设置,另一个应用程序可以为我们的开发环境处理密码重置。目标是在一个地方

每个应用程序的主要信息都是相同的。每个应用程序都有一个名称、描述等。不同之处在于它们的功能和使用的设置。不过,这些设置在它们自己的模型中,并通过外键链接回应用程序

我不确定哪种模型类型最适合我的用例。两者看起来都很有用,但如果是这样的话,我假设我遗漏了其中一个(或两个)方面


我的问题是,使用声明我的
应用程序与使用声明我的
应用程序有什么区别?

已经有8个月没有人碰过这个了。我应该更清楚,但我要尝试一下

显然,您的第一个选择是根本不使用基类,并在每个模型上复制字段。我知道您没有问过这一点,但对于其他阅读本文的人来说,这是一个适合初学者的好方法。这很简单,模型的所有内容都列在一个地方,而不是指向位于该模型中其他地方的另一个模型为某些字段编写代码

抽象基类可能是下一个最简单、也是下一个最常用的。当两个或多个模型中存在大量字段重复时,值得考虑。使用此方法可以消除键入(或剪切和粘贴)的需要字段在多个模型中反复出现。当您声明基类抽象时,数据库中从未实际生成表。只有在生成子表时才使用基类。这使数据库更简单,并保持性能,因为您不必构建与基类的关系,也不必使用联接进行查询数据。您还可以向每个子模型(代理模型不能)上的子类添加其他字段(属性)

代理模型有些相似,因为您有一个基类或父类,但与之有很大的区别。在所有模型都有相同的字段(属性),但可能有不同的“类型”的情况下,您将使用代理模型对象。例如,您可能有一个汽车的基本类,并使用制造商作为您的类型。然后您可能有福特、雪佛兰和本田车型,它们都是汽车的代理车型。它们都有相同的字段。为该车型选择的经理类是使它们彼此不同的真正原因。从数据库的角度来看,确实如此只生成一个表…Cars,这比生成多个表的性能更好,但缺点是在不将制造商特定字段添加到整个Cars表的情况下,无法将其添加到模型中

一般来说,我建议从抽象基类开始,为具有大量重复字段的模型创建一个抽象基类。代理模型似乎是一个更具体的用例,但如果您有这个用例,并且您更熟悉它,也可以使用它

基于您的描述,我不是100%清楚您的特定用例,但希望我已经给了您足够的信息,让您自己决定什么是最好的