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' 
     })) 
相关问题