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

Jas*_*enX 1 django django-models

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

创建仅用于模型的另一个App并由App A和导入它是常见的做法app B吗?

我知道我可以在任何定义它们App A,并app B和有一个没有他们从其他应用程序导入,但由于某些原因,我被它困扰。在我看来,两个应用程序均应导入一个“必需模型”应用程序,而不是相互之间导入模型。

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

lev*_*evi 5

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

如果需要公用模型,请在以下位置创建它们 utils/models.py

如果您需要公用函数,请创建一个在其中实现这些方法的Mixin类 utils/mixins.py

我们称之为Mixin Classpython类,您在其中放置了任何类型的方法,以便在视图/模型/序列化器上重新使用它。

此外,这是一个很好的做法在普通的应用程序定义的模型,因为你能避免循环依赖,如果定义modelX在你的app A,那么你导入你的app B,如果因为某些原因,app A需要从一些模式app B,你会得到一个循环导入错误。

关于mixin的例子

我们有一个正常的看法

class MyView(View):
    redirect_field_name = 'redirect_to'
    .....
Run Code Online (Sandbox Code Playgroud)

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

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'
Run Code Online (Sandbox Code Playgroud)

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

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