Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django应用程序之间共享选择_Python_Django - Fatal编程技术网

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

Python 在Django应用程序之间共享选择,python,django,Python,Django,在我的模型中,我在一些字段中使用了选项。但我在Django项目的多个应用程序中使用相同的选项 我应该将我的选择放在哪里,如何在我的所有应用程序中加载这些选择?此问题有几种解决方案: 将您的选择放在设置文件中,并在应用程序中获取这些值 在“确定应用程序或模型”中设置常量,并按onwer名称确定访问选项 将选项项设置为一对多,然后可以按模型访问选项 此外,您还可以混合使用以下方法:)我们通常在每个项目中都有相当多的特定于项目的应用程序,为了尽量保持依赖关系合理干净,我们通常还有两个应用程序:

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


我应该将我的选择放在哪里,如何在我的所有应用程序中加载这些选择?

此问题有几种解决方案:

  • 将您的选择放在设置文件中,并在应用程序中获取这些值

  • 在“确定应用程序或模型”中设置常量,并按onwer名称确定访问选项

  • 将选项项设置为一对多,然后可以按模型访问选项


  • 此外,您还可以混合使用以下方法:)

    我们通常在每个项目中都有相当多的特定于项目的应用程序,为了尽量保持依赖关系合理干净,我们通常还有两个应用程序:

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

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


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

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

    例如:

    常数.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')
    )
    
    任何_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',)