在Django应用程序之间共享选择

时间:2015-02-25 12:27:10

标签: python django

在我的模型中,我在某些字段中使用choices选项。但我在Django项目中的多个应用程序中使用相同的选项。

我应该在哪里做出选择,如何在我的所有应用中加载这些选项?

3 个答案:

答案 0 :(得分:3)

我们这里每个项目通常都有不少项目专用应用程序,为了让依赖项保持合理清洁,我们通常会再增加两个应用程序:

  • “核心”,其中我们将其他应用程序共享的内容(任何应用程序都可以依赖于“核心”,“核心”不依赖于任何应用程序),

  • 和“main”将事物联系在一起(“主要”可以取决于任何应用程序,不允许应用程序依赖“主要”)。

在您的情况下,这些共享选项属于core.models

答案 1 :(得分:2)

我喜欢将所有常量放在每个应用程序中名为constants.py的文件中。当我们想要在应用程序之间共享某种全局选择时,我们将它们放入"核心" app(如@bruno desthuilliers描述的那样)并在需要时导入它们。

示例:

constants.py

# -*- coding: utf-8 -*-

STATE_1 = 0
STATE_2 = 1
STATE_3 = 2

STATE_CHOICES = (
    (STATE_1, 'STATE 1'),
    (STATE_2, 'STATE 2'),
    (STATE_3, 'STATE 3')
)

any_app / models.py

from django.db import models
from other.app.models import User
from core.constants import SOME_OTHER_CHOICES
from core.constants import STATE_1_REAL
from .constants import STATE_CHOICES
from .constants import STATE_1



class ModelX(models.Model):
    user = models.ForeignKey(User)
    state = models.IntegerField(verbose_name=u'state', 
                                choices=STATE_CHOICES, 
                                default=STATE_1)
    core_state = models.IntegerField(verbose_name=u'real state', 
                                     choices=SOME_OTHER_CHOICES, 
                                     default=STATE_1_REAL)

    class Meta:
        ordering = ('-state',)

答案 2 :(得分:0)

这个问题有几个解决方案:

  1. 将您的选择放在设置文件中,并在应用中获取这些值。
  2. 在确定应用或模型时设置CONSTANT,并通过onwer名称
  3. 访问选项
  4. 按一对多设置选项,然后您可以按型号

    访问选项

    ...

  5. 您也可以将这些方式混合在一起:)