Django形式的选择字段不提供None作为选择

时间:2013-03-26 22:37:38

标签: django django-forms

我在定义为

的表单中有一个选择字段
REFERRAL_CHOICES = (
    (None, 'Please choose'),
    ('search', 'From a search engine'),
    ('social', 'From a social network'),
)
referral_source = forms.ChoiceField(
    choices=REFERRAL_CHOICES
)

我还有一个clean_company_size函数,用于检查字段是否设置为良好值:

def clean_company_size(self):
    company_size = self.cleaned_data.get('company_size', None)
    if company_size is None:
        raise ValidationError('Please select a company size')

    return company_size

如果我在上面的“无”检查中添加or company_size == 'None'条件,则一切正常。但是,我很好奇为什么将None值转换为字符串。在选择字段中完成默认提示并且需要该字段的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

所有POSTGET变量以及Select HTML标记值最初都是以字符串形式发送的。当Django可以从模型中删除时,它们将它们转换为-say- int。在您的情况下,无法区分“无”字符串和“无”对象,它们都是可能的值。您可能更愿意在None

中使用“”代替REFERRAL_CHOICHES