gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:14:33 25 4
gpt4 key购买 nike

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

现在我正在努力弄清楚如何声明这个特定的模型。每个 application 都会做一些与其他应用程序完全不同的事情。一个人可能会管理特定的 CMS 设置,另一个人可能会处理我们开发环境的密码重置。目标是在一个地方获得常见的支持项目。

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

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

我的问题是,使用 abstract base class models 声明我的 application 有什么区别?与 proxy models

最佳答案

8 个月没有人碰过它。我应该知道得更多,但我会尝试一下。

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

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

代理模型有些相似,因为您有一个基类或父类,但两者之间存在显着差异。在所有模型都具有相同字段(属性)但可能具有不同“类型”的对象的情况下,您将使用代理模型。例如,您可能有一个基类 Cars,并使用制造商作为您的类型。然后你可能有 Ford、Chevy 和 Honda 模型,它们都是 Cars 的代理模型。他们都有相同的领域。为模型选择的经理类真正使它们彼此不同。从数据库的角度来看,实际上只构建了一个表...Cars,这比构建多个表具有更好的性能,但缺点是您不能在不将制造商特定字段添加到整个 Cars 表的情况下将它们添加到模型中。

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

根据您的描述,我并不是 100% 清楚您的具体用例,但希望我已经为您提供了足够的信息,让您自己决定什么是最好的。

关于python - Django 中的抽象基类模型与代理模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49256558/

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