首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持多种django模型类型选择干燥的最佳方法是什么?

保持多种django模型类型选择干燥的最佳方法是什么?
EN

Stack Overflow用户
提问于 2015-04-06 07:54:43
回答 1查看 623关注 0票数 1

我将我的系统解耦成许多应用程序,其中每个应用程序都有许多模型,其中许多模型都有

这就是结构。

根部

  • 核心(用于保存通用材料)
  • 解耦app
  • 解耦app
  • 解耦app
  • ..。
  • 解耦app

在这些应用程序中,很多时候模型都有模型类型的选择。例如,我有许多类似于这个事件和资源模型的模型。

代码语言:javascript
复制
VIDEO = 1
AUDIO = 2
IMAGE = 3
ARTICLE = 4
BOOK = 5
DOCUMENT = 6

RESOURCE_CONTENT_CHOICES = (
    (VIDEO, _("video")),
    (AUDIO, _("audio")),
    (IMAGE, _("image")),
    (ARTICLE, _("article")),
    (BOOK, _("book")),
    (DOCUMENT, _("document")),
)
class Resource(models.Model):
    title = models.CharField(max_length=256)
    resource_content = models.IntegerField(choices=RESOURCE_CONTENT_CHOICES)
    url = models.URLField()

PAST = 1
PRESENT = 2
FUTURE = 3

EVENT_TYPE_CHOICES = (
    (PAST, _("past")),
    (PRESENT, _("present")),
    (FUTURE, _("future")),
)
class Event(models.Model):
    title = models.CharField(max_length=256)
    event_type = models.IntegerField(choices=EVENT_TYPE_CHOICES)

此外,许多时候,像EVENT_TYPE_CHOICES这样的元组也在其他模型中使用。我有大约20个其他型号的event_type类类型字段。

我在想,我可以在核心应用程序中创建types.py文件,并在一个地方为所有类型编写一个片段,这样我就可以很容易地在视图、其他模型中使用,因为应用程序不会在其他项目中被重用。但我不确定这是不是最好的方法。

那么,什么才是使所有事物都可伸缩和干燥的最佳方法呢?

EN

回答 1

Stack Overflow用户

发布于 2015-04-06 11:48:21

这取决于您对代码的预期使用。

解耦应用程序的目标是隔离预期在许多Django项目中通常可重用的功能。然而,你提到:

"...your应用程序无论如何也不会在其他项目中被重用“

如果是这样的话,特别是如果应用程序被认为不是很好的重用候选程序,那么就没有必要严格地将应用程序解耦。因此,在应用程序的核心部分使用一个Python文件,其中包含多个模型使用的各种选择列表。

如下所示:

代码语言:javascript
复制
# choices.py
RESOURCE_CONTENT_CHOICES = (
    ...
)
EVENT_TYPE_CHOICES = (
    ...
)

并在需要时进口:

代码语言:javascript
复制
# models.py
from myproject.core.choices import EVENT_TYPE_CHOICES

class Event(models.Model):
    # Optional: See additional note below
    EVENT_TYPE_CHOICES = EVENT_TYPE_CHOICES
    ...
    event_type = models.IntegerField(choices=EVENT_TYPE_CHOICES)
    ...

或者,如果您发现您的一些应用程序确实是很好的重用候选程序,那么解耦它们比干燥更重要。在这种情况下,您应该在应用程序中维护您的选择,即使在其他应用程序中有一些选择是重复的。

附加注意:使用这两种方法,对模型类中的选择进行引用通常是非常有用的。请参阅:https://docs.djangoproject.com/en/stable/ref/models/fields/#choices

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29467478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档