Python 保持许多不同django模型类型选择干燥的最佳方法是什么?

Python 保持许多不同django模型类型选择干燥的最佳方法是什么?,python,django,web-services,architecture,Python,Django,Web Services,Architecture,我将我的系统解耦到许多应用程序中,每个应用程序都有许多模型,其中许多模型都有 这就是结构 根 核心(用于保存通用材料) 解耦应用程序 解耦应用程序 解耦应用程序 解耦应用程序 在这些应用程序中,很多时候模型都有模型类型选择。例如,我有许多类似于此事件和资源模型的模型 VIDEO = 1 AUDIO = 2 IMAGE = 3 ARTICLE = 4 BOOK = 5 DOCUMENT = 6 RESOURCE_CONTENT_CHOICES = ( (VIDEO, _("vide

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

这就是结构

  • 核心(用于保存通用材料)
  • 解耦应用程序
  • 解耦应用程序
  • 解耦应用程序
  • 解耦应用程序
在这些应用程序中,很多时候模型都有模型类型选择。例如,我有许多类似于此事件和资源模型的模型

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\u TYPE\u CHOICES
。我还有大约20个其他型号,带有
事件类型
类似类型字段

我在想,我可以在核心应用程序中创建types.py文件,并在一个地方为所有类型编写一个dict,这样我就可以轻松地在视图、其他模型等中使用,因为应用程序无论如何都不会在其他项目中重用。但我不确定这是否是最好的方法


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

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

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

“…无论如何,您的应用不会在其他项目中重复使用”

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

像这样:

# choices.py
RESOURCE_CONTENT_CHOICES = (
    ...
)
EVENT_TYPE_CHOICES = (
    ...
)
并在需要时进口:

# 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)
    ...
或者,如果你发现你的一些应用程序确实是很好的重用对象,那么将它们分离比干涸更重要。在这种情况下,您应该在该应用程序中维护您的选择,即使某些选择在其他应用程序的其他地方重复

附加说明:使用这两种方法中的任何一种,在模型类中引用选项通常都非常有用。见: