2013-03-26 121 views
1

我在定義爲Django的形式與選擇字段不提供無作爲選擇

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值被轉換爲字符串。在選擇字段中完成默認提示並且需要該字段的最佳方式是什麼?

+2

中使用「」代替None所有POST和GET變量以及選擇HTML標記值最初都以字符串形式發送。 Django將它們轉換爲-say-int時,它可以從模型中扣除。在你的情況下,無法將「無」字符串與「無」對象區分開來,它們都是可能的值。你可能更喜歡在你的REFERRAL_CHOICHES – furins 2013-03-26 22:43:38

+0

中使用「」而不是None。如果你做出這個答案,我會對它進行投票並接受它,因爲它是有效的。 – 2013-03-26 22:44:38

+0

謝謝:)在這裏它是 – furins 2013-03-26 22:53:28

回答

1

全部POSTGET變量以及Select HTML標記值最初作爲字符串發送。當Django從模型中扣除時,它們將它們轉換爲-say- int。在你的情況下,無法將「無」字符串與「無」對象區分開來,它們都是可能的值。您可能更願意在您的REFERRAL_CHOICHES

+1

雖然你是絕對正確的,但這感覺就像是Django中的一個bug。在後端,我們發送一個無,我們可以期望收到它作爲無,而不是'無'... – 2015-10-26 18:33:37