从Django Form清除`ChoiceField`

时间:2018-09-19 19:13:12

标签: django django-models django-forms

型号:

class SocialGroup(models.Model):
    INDIVIDUAL = 'individual'
    INSTITUTE = 'institute'
    options = ((INDIVIDUAL, 'Individual'),
               (INSTITUTE, 'Institute'))
    level = models.CharField(choices=options, max_length=100)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['name']

表格:

class GroupLevelForm(forms.Form):
    level = forms.ChoiceField(choices=SocialGroup.options)

    def clean_level(self):
        return self.cleaned_data['level']

当我调用表单时,我会像level = GroupLevelForm({level: 'Individual'})那样做。我想individual回到已清除的数据。

  • 我正在以表单的形式传递外部名称,该如何获取choice field的内部名称。
  • 例如:options = (('internal, 'External'),)level = GroupLevelForm({level: 'External'})一样,如何在internal中获得cleaned_data

谢谢!

2 个答案:

答案 0 :(得分:3)

发生错误是因为您没有随时在表单上调用is_valid()cleaned_data仅在被调用后存在。

您想要一些与[伪代码传入]类似的东西:

def clean_fields():
    if form.is_valid():
        self.cleaned_data['level']

有关django的解释,请参考文档:building a form

答案 1 :(得分:0)

如果我正确理解了这个问题,我认为你可以做到

def clean_level(self):
    selected_display_name = self.cleaned_data['level']
    for val, disp_name in SocialGroup.options:
        if disp_name == selected_display_name:
            return val
    return selected_display_name  # or whatever default you want