我将我的系统解耦成许多应用程序,其中每个应用程序都有许多模型,其中许多模型都有
这就是结构。
根部
在这些应用程序中,很多时候模型都有模型类型的选择。例如,我有许多类似于这个事件和资源模型的模型。
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文件,并在一个地方为所有类型编写一个片段,这样我就可以很容易地在视图、其他模型中使用,因为应用程序不会在其他项目中被重用。但我不确定这是不是最好的方法。
那么,什么才是使所有事物都可伸缩和干燥的最佳方法呢?
发布于 2015-04-06 11:48:21
这取决于您对代码的预期使用。
解耦应用程序的目标是隔离预期在许多Django项目中通常可重用的功能。然而,你提到:
"...your应用程序无论如何也不会在其他项目中被重用“
如果是这样的话,特别是如果应用程序被认为不是很好的重用候选程序,那么就没有必要严格地将应用程序解耦。因此,在应用程序的核心部分使用一个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)
...或者,如果您发现您的一些应用程序确实是很好的重用候选程序,那么解耦它们比干燥更重要。在这种情况下,您应该在应用程序中维护您的选择,即使在其他应用程序中有一些选择是重复的。
附加注意:使用这两种方法,对模型类中的选择进行引用通常是非常有用的。请参阅:https://docs.djangoproject.com/en/stable/ref/models/fields/#choices
https://stackoverflow.com/questions/29467478
复制相似问题