在模型中组织长列表的好方法是什么?

时间:2016-02-10 11:11:11

标签: python django-models

以下是我如何声明我的选择字段:

niveau_etudes = models.CharField(max_length=1,
                                 choices=[(a, b) for a, b in
                                          list(TAB_NIVEAU_ETUDE.items())],
                                 default=NIVEAU_ETUDE_PRIMAIRE,
                                 null=True, blank=True)

然后我创建这样的组合:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void forceRTLIfSupported()
{
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    }
}

问题是我的客户刚刚发送了...... 八个字段(这是最短的一个!)。所以我不能把所有那些“静态”值放在模型文件中,因为它将变得不可读。

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我会这样做:

#/usr/bin/python

class Personne: 
    pass

names = ["PETITE_ENFANCE", "PRIMAIRE", "SECONDAIRE_1ER_CYCLE",
    "SECONDAIRE_2ND_CYCLE", "POST_SECONDAIRE", "SUPERIEUR_CYCLE_COURT",
    "SUPERIEUR_LICENCE", "MASTER", "DOCTORAT", "AUTRE"]

descrpitions = ('Early childhood education ("less than primary" for educational attainment)',
                "Primary education", "Lower secondary education",
                "a", "a", "a", "a", "a", "a", "a", "a", "a", )
for i, name in enumerate(names):
    setattr(Personne, "NIVEAU_ETUDE_" + name, unicode(i))

TAB_NIVEAU_ETUDE = {i: (descrpitions[i]) for i, name in enumerate(names)}
setattr(Personne, "TAB_NIVEAU_ETUDE", TAB_NIVEAU_ETUDE)

print Personne.NIVEAU_ETUDE_PETITE_ENFANCE
print Personne.NIVEAU_ETUDE_DOCTORAT
print TAB_NIVEAU_ETUDE

输出:

0
8
{0: 'Early childhood education ("less than primary" for educational attainment)', 1: 'Primary education', 2: 'Lower secondary education', 3: 'a', 4: 'a', 5: 'a', 6: 'a', 7: 'a', 8: 'a', 9: 'a'}

不知道上面代码中的_()可能是某个变量/函数,但它应该可以正常工作。

答案 1 :(得分:0)

以下是我的表现:

我已经创建了另一个班级,每次我想要引用"常数"我打电话给我的班级,例如:

class Personne(models.Model):
    sexe = models.CharField(max_length=1,
                            choices=[(a, b) for a, b in
                                     list(PersonneEnums.TAB_SEXE.items())],
                            default=PersonneEnums.SEXE_HOMME)

这里是我的类,它只包含已翻译的常量:

class PersonneEnums(object):
    SEXE_HOMME = u'0'
    SEXE_FEMME = u'1'
    TAB_SEXE = {SEXE_HOMME: _(u'Male'),
                SEXE_FEMME: _(u'Female'), }

    EST_NON_FUMEUR = u'0'
    EST_FUMEUR = u'1'
    EST_FUMEUR_OCCASIONNEL = u'2'
    EST_FUMEUR_AUTRE = u'3'
    TAB_EST_FUMEUR = {EST_NON_FUMEUR: _(u'Non-smoker'),
                      EST_FUMEUR: _(u'Smoker'),
                      EST_FUMEUR_OCCASIONNEL: _(u'Social smoker'),
                      EST_FUMEUR_AUTRE: _(u'Other'),
                      }