繁体   English   中英

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

[英]Abstract base class model vs Proxy model in Django

我正在构建一个控件面板,它将在Django中有多个子应用程序。 我的一个模型是一个application ,它将具有重要的设置,如namedescriptioninstall_pathid (以便我可以将特定设置和配置值与此应用程序相关联。

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

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

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

我的问题是,使用抽象基类模型代理模型声明我的application之间有什么区别?

8个月没人接触到这个。 我应该知道的更好,但我会去捅它。

显然,您的第一个选择是根本不使用基类,并在每个模型上复制您的字段。 我知道你没有问过这个问题,但对于看这篇文章的其他人来说,这是一个很好的方式去初学者。 它很简单,模型的所有内容都列在一个地方,而不是指向位于某些字段的代码中的其他位置的另一个模型。

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

代理模型有点类似,因为你有一个基类或父类,但与那里有很大的不同。 在所有模型具有相同字段(属性)的情况下,您将使用代理模型,但您可能具有不同的“类型”对象。 例如,您可能拥有Cars的基类,并使用制造商作为您的类型。 那么你可能有福特,雪佛兰和本田车型都是汽车的代理车型。 他们都有相同的领域。 为模型选择的经理类真正使他们彼此不同。 从数据库的角度来看,实际上只构建了一个表...汽车,导致比构建多个表更好的性能,但缺点是您不能将特定于制造商的字段添加到模型而不将它们添加到整个Cars表。

一般情况下,我建议从具有大量重复字段的模型的Abstract Base Classes开始。 代理模型似乎是一个更具体的用例,但如果你有用例并且一旦你更精通,也可以使用它。

根据您的描述,我不是100%明确您的具体用例,但希望我已经给您足够的信息来决定您自己最好的用途。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM