2016-03-08 69 views
1

我想呈現一個沒有db模型的簡單窗體,但我得到錯誤。以下是代碼:Django簡單窗體「對象沒有屬性」is_hidden'「

from django import forms 
from django.utils.safestring import mark_safe 
class ContactForm(forms.Form): 
    category_options = (
     ('select category', '--Select Category--'), 
     ('fire safety', 'Fire Safety'), 
     ('batteries/solar panels', 'Batteries/Solar Panels'), 
     ('cctv systems','CCTV Systems') 
    ) 
    category = forms.ChoiceField(label="Select a Category", choices=category_options, required=True) 
    full_name = forms.CharField(required=False) 
    email = forms.EmailField() 
    phone = forms.CharField(widget=forms.IntegerField) 
    message = forms.CharField(widget=forms.Textarea(attrs={'cols': 10, 'rows': 10})) 

    def clean_email(self): 
     email = self.cleaned_data.get('email') 

     return email 

我沒有拿到手機的權利。我需要爲電話號碼添加驗證,但無法找出使用Widget的正確方法。

我需要找到添加電話字段的準確方式。

我收到錯誤:

AttributeError at /contact/ 
'IntegerField' object has no attribute 'is_hidden' 

當我使用

phone = forms.CharField(widget=forms.NumberInput) 

enter image description here

從不同領域的Python代碼生成我的HTML是繼我得到以下結果

<p> 
<label for="id_email">Email:</label> 
<input id="id_email" name="email" type="email"> 
</p> 

<p> 
<label for="id_phone">Phone:</label> 
<input id="id_phone" name="phone" type="number"> 
</p> 

我上面的兩個字段都是用python代碼生成的,但是email字段正確地應用了模板css。但「電話」字段不是呈現CSS。

請指教。

+0

不知道爲什麼你要'類型= 「數字」'對於手機領域。 –

+0

只需使用CharField並在'def clean_phone(self):'方法內執行所有驗證。 –

+0

Avinash我這樣做了,但我想可能有一些內置的方式來完成它。 –

回答

3

forms.IntegerField不是窗口小部件,而是窗體上的字段類型。

你需要的是一個forms.NumberInput

phone = forms.CharField(widget=forms.NumberInput) 
+0

通過您的推薦,看看我上面得到了什麼。它沒有得到我的CSS,而是它給了我一個沒有繼承CSS的領域。我在上面的原始問題中將結果粘貼爲快照。 –

+0

你也可以粘貼'phone'字段和其他字段的HTML嗎?而且,你怎麼在視圖中渲染這個表單? – AKS

+0

\t <標籤= 「id_email」>電子郵件: <輸入的ID = 「id_email」 名稱= 「電子郵件」 類型= 「電子郵件」>

\t <標籤= 「id_phone」>電話:

0

您可以使用

phone = forms.CharField(widget=forms.TextInput(
     attrs={ 
      'type' : 'number', 
      'class' : 'your_class' 
     })) 
相關問題