两个单独的Django应用程序需要相同的型号

时间:2016-08-12 15:57:05

标签: django django-models

假设我的Django项目有两个应用:App Aapp B。两个应用都需要使用10个型号。

通常的做法是为模型创建另一个应用,并由App Aapp B导入吗?

我知道我可以在App Aapp B中定义它们,并让没有它们的那些从其他应用程序中导入它们,但由于某种原因,我对它感到困扰。对我而言,两个应用程序都应该导入“必需模型”应用程序,而不是彼此的模型。

我是Django的新手,这种情况下的常见做法是什么?

1 个答案:

答案 0 :(得分:4)

是的,你可以创建一个名为utils的应用程序,你应该放置任何常见的模型,序列化器,方法等。

如果您需要公共模型,请在utils/models.py

中创建它们

如果你需要公共函数,请在utils/mixins.py

中创建一个实现thoses方法的Mixin类

我们调用Mixin Class,这是一个python类,您可以在其中放置任何类型的方法,以便在您的views / models / serializer上重用它。

此外,在常见应用中定义模型是一种很好的做法,因为如果在modelX中定义app A,则可以避免循环依赖,然后将其导入{{1}如果由于某种原因,app B需要app A中的某个模型,则会出现循环导入错误。

关于mixin的示例

我们有一个正常的观点

app B

假设我们希望只允许已登录的用户获取它。我们只需要导入登录所需的mixin并添加它

class MyView(View):
    redirect_field_name = 'redirect_to'
    .....

检查用户是否已登录的逻辑是在LoginRequiredMixin类中完成的。

这也适用于模型,序列化器等。