【发布时间】:2013-03-26 22:37:38
【问题描述】:
我有一个选择字段,其格式定义为
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 值被强制转换为字符串。在选择字段中完成默认提示并要求该字段的最佳方法是什么?
【问题讨论】:
-
所有 POST 和 GET 变量,以及 Select HTML 标记值最初都是作为字符串发送的。当它可以从模型中扣除时,Django 将它们转换为 -say- int。在您的情况下,无法将“None”字符串与“None”对象区分开来,它们都是可能的值。您可能更喜欢在 REFERRAL_CHOICHES 中使用 "" 而不是 None
-
很好的解释。如果您将此作为答案,我会投票并接受它,因为它有效。
标签: django django-forms