【问题标题】:Two separate Django apps require the same models两个独立的 Django 应用程序需要相同的模型
【发布时间】:2016-12-19 17:04:06
【问题描述】:

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

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

我知道我可以在 App Aapp B 中定义它们,并让没有它们的应用程序从另一个应用程序导入它们,但出于某种原因,我对此感到困扰。在我看来,两个应用程序都应该导入一个“必需模型”应用程序,而不是相互导入模型,这似乎更合乎逻辑。

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

【问题讨论】:

    标签: django django-models


    【解决方案1】:

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

    如果您需要公共模型,请在utils/models.py 中创建它们

    如果你需要commons函数,在utils/mixins.py创建一个Mixin Class实现这些方法

    我们调用Mixin Class,这是一个python 类,您可以在其中放置任何类型的方法,以便在您的视图/模型/序列化器上重用它。

    此外,在通用应用程序中定义模型是一个很好的做法,因为您可以避免循环依赖,如果您在 app A 中定义 modelX,那么您将其导入您的 app B,如果对于某些原因,app A 需要来自app B 的一些模型,你会得到一个循环导入错误。

    关于 mixin 的示例

    我们有一个正常的看法

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

    假设我们只允许登录用户获取它。我们只需要 import login required mixin 并添加它

    from django.contrib.auth.mixins import LoginRequiredMixin
    
    class MyView(LoginRequiredMixin, View):
        login_url = '/login/'
        redirect_field_name = 'redirect_to'
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2010-12-28
      • 2012-06-05
      • 2020-07-15
      • 1970-01-01
      • 2013-11-06
      相关资源
      最近更新 更多