gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:45:36 25 4
gpt4 key购买 nike

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

这是结构。

root

  • 核心(用于保存通用内容)
  • 解耦应用
  • 解耦应用
  • 解耦应用
  • ...
  • 解耦应用

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

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 文件,并在一个地方为所有类型编写一个字典,这样我就可以轻松地在 View 、其他模型等中使用,因为应用程序不会在其他项目中重用反正。但我不确定这是否是最好的方法。

那么让一切变得可扩展且 DRY 的最佳方法是什么?

最佳答案

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

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

"...your apps are not going to be reused in other projects anyway"

如果是这种情况,特别是如果应用程序不被认为是重用的良好候选者,则没有必要严格分离应用程序。因此,请在应用程序的核心中使用单个 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)
...

或者,如果您发现某些应用程序确实适合重用,那么将它们解耦比 DRY 更重要。在这种情况下,您应该在该应用程序中保留您的选择,即使某些选择在其他应用程序的其他地方重复。

附加说明:无论使用哪种方法,引用模型类中的选择通常都非常有用。请参阅:https://docs.djangoproject.com/en/stable/ref/models/fields/#choices

关于django - 保持许多不同 django 模型类型选择干燥的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29467478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com