从Enum动态更新Django表单选择字段

时间:2014-03-27 15:53:06

标签: python django django-models enums django-forms

我正在尝试动态更新Django中Choice Field的选择。

我为每个DOMAIN都有一个名为DOMAINS和相关SUBDOMAINS的枚举作为哈希。

 DOMAINS = (
    (CHE_DOMAIN, 'Chemistry'),
    (CS_DOMAIN, 'Computer Science'),
 )
 SUBDOMAINS = {
    CHE_DOMAIN: (
        ('CHE-CCHE', 'Computational Chemistry'),
        (OTHER_DOMAINS, 'Others'),
    ),
    CS_DOMAIN: (
        ('CS-ALG', 'Algorithms'),
        ('CS-AI', 'Artifical Intelligence'),
        ('CS-CRYP', 'Cryptography'),
    ),
   }

因此,如果用户选择CS_DOMAIN,我的子域必须在CS下填充子域。

我有这样的模型

domain = models.CharField(max_length=MyEnums.DOMAIN_CODE_LEN,
                                    choices=MyEnums.DOMAINS,
                                    blank=False, null=False, default=MyEnums.OTHER_DOMAINS)
subdomain1 = models.CharField(max_length=MyEnums.DOMAIN_CODE_LEN,
                              blank=False, null=False, default=MyEnums.OTHER_DOMAINS)
subdomain2 = models.CharField(max_length=MyEnums.DOMAIN_CODE_LEN,
                              blank=False, null=False, default=MyEnums.OTHER_DOMAINS)

我不知道如何在我的表单中动态填充它。但是,当我尝试硬编码进行实验时..

class ResearchAreasForm(forms.ModelForm):
    subdomain1 = forms.ChoiceField(choices=MyEnums.SUBDOMAINS['CHE'])
    subdomain2 = forms.ChoiceField(choices=MyEnums.SUBDOMAINS['CHE'])

这是错误。

  

异常类型:ValueError

     

例外值:
  需要多于1个值才能解压

有关如何动态更新表单选择值的任何建议以及我的硬代码出现错误的原因?感谢。

0 个答案:

没有答案