【问题标题】:where to put relation models in django在 django 中放置关系模型的位置
【发布时间】:2015-05-29 06:49:08
【问题描述】:

首先是简化的场景:

from django.db import models

class Product(models.Model):
    name = models.TextField()
    description = models.TextField()

class Merchant(models.Model):
    name = models.TextField()

class MerchantProductMapping(models.Model):
    merchant = models.ForeignKey(Merchant)
    product = models.ForeignKey(Product)
    price = models.IntegerField()
    inventory_limit = models.IntegerField()

我有另一个关系模型 (MerchantProductMapping),因为关系有它自己的属性。现在MerchantProduct 模型的要求已经发展到需要各自独立的应用程序的程度。 merchant 应用程序的 models.pyMerchant 模型所在的位置,product 应用程序的 models.pyProduct 模型所在的位置。
我需要帮助的是关系模型MerchantProductMapping。两个应用程序都需要它,我应该把它放在哪里?我一直在阅读 mixins 并想知道它们是否可以以某种方式帮助我。
编辑:我应该补充一点,该应用程序之前是在服务器端呈现的。现在它将使用 Angular 客户端 - REST api 方法来完成。 django rest framework 将在 django 之上使用。

【问题讨论】:

  • 您可以放入任何models.py 文件。在数据库中,它将只是数据库中的新表。
  • 我知道我可以把它放在任何地方。我想知道的是它“应该”放在哪里。
  • 我投票给merchantmodel.py
  • 然后在需要时将其导入categorymodels.py

标签: python django django-models orm


【解决方案1】:

为此目的创建“通用”应用程序......你可以在那里放置装饰器、模板标签、基本表单、基本模型、登录|注销重定向视图和 url、ajax 视图、基本过滤器、基本表......等等

注意:创建“应用程序”python 包目录(其中包含 __init__.py 的目录)并(重​​构)将所有应用程序移到那里。

编辑:

另一种方法 - 创建“模型”python 包目录并将你的 models.py 拆分为包内逻辑分离的文件

【讨论】:

  • 你能解释一下'base'是什么意思吗?我如何在我的场景中使用您的策略?我之前只有一个models.py,但它已经变得太大了。一个普通的应用程序不会破坏将我的项目模块化为应用程序的目的。
  • 我添加了另一种方式
  • 但我的应用程序几乎都围绕着一个中心模型。所以我不确定将它们聚合在一个目录下。我在想,如果我按照 Lafada 的建议将它添加到任何一个应用程序中,或者像您在替代解决方案中那样添加到单个包中,它就不会像模块化或可重复使用的那样。我不想到处导入所有东西。您以前的解决方案更接近标记。我将离开商家和产品应用程序。需要关系的应用程序将具有关系。本应用不会涵盖商家与其他模特的关系,只关心自己
猜你喜欢
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2015-01-22
  • 1970-01-01
相关资源
最近更新 更多