django.forms中缺少TextField

时间:2011-09-05 00:03:48

标签: python django

from django import forms

class UserForm(forms.ModelForm):
    first_name = forms.TextField(label=_(u'First name'), required=False)
    last_name = forms.TextField(label=_(u'Last name'))

它给了我一个“ AttributeError:'module'对象没有属性'TextField'。 一切似乎都没问题,除了缺少的TextField:

ipdb> forms
<module 'django.forms' from '/usr/local/lib/python2.7/dist-packages/django/forms/__init__.pyc'>
ipdb> forms.
forms.BaseForm                        forms.EmailField                      forms.MultiWidget                     forms.TypedChoiceField
forms.BaseModelForm                   forms.Field                           forms.MultipleChoiceField             forms.TypedMultipleChoiceField
forms.BooleanField                    forms.FileField                       forms.MultipleHiddenInput             forms.URLField
forms.CharField                       forms.FileInput                       forms.NullBooleanField                forms.ValidationError
forms.CheckboxInput                   forms.FilePathField                   forms.NullBooleanSelect               forms.Widget
forms.CheckboxSelectMultiple          forms.FloatField                      forms.PasswordInput                   forms.fields
forms.ChoiceField                     forms.Form                            forms.RadioSelect                     forms.fields_for_model
forms.ClearableFileInput              forms.HiddenInput                     forms.RegexField                      forms.forms
forms.ComboField                      forms.IPAddressField                  forms.Select                          forms.formsets
forms.DEFAULT_DATETIME_INPUT_FORMATS  forms.ImageField                      forms.SelectMultiple                  forms.model_to_dict
forms.DEFAULT_DATE_INPUT_FORMATS      forms.IntegerField                    forms.SlugField                       forms.models
forms.DEFAULT_TIME_INPUT_FORMATS      forms.Media                           forms.SplitDateTimeField              forms.save_instance
forms.DateField                       forms.MediaDefiningClass              forms.SplitDateTimeWidget             forms.util
forms.DateInput                       forms.ModelChoiceField                forms.TextInput                       forms.widgets
forms.DateTimeField                   forms.ModelForm                       forms.Textarea                        
forms.DateTimeInput                   forms.ModelMultipleChoiceField        forms.TimeField                       
forms.DecimalField                    forms.MultiValueField                 forms.TimeInput          

有什么想法吗?

5 个答案:

答案 0 :(得分:83)

CharField可能就是你要找的东西。

编辑:为了澄清,文档提到TextField作为模型字段类型。您不能将其用作表单字段。 OP指出的table表示模型中的TextField在相应的ModelForm中表示为CharField(带widget=forms.Textarea)。我想,那时没有Textarea作为默认小部件的表单字段。

如果我猜到为什么Django做出了这个选择,我会说有两个字段只在他们使用的小部件中有所不同,而不是存储的数据类型,验证等可能被人们认为是无用的在Django,因此你必须手动更改小部件。

答案 1 :(得分:52)

如果你想要一个textarea,你可以使用forms.CharField和forms.TextArea小部件。

class ContactForm(forms.Form):
    message = forms.CharField(widget=forms.Textarea)

答案 2 :(得分:1)

只想为像我这样的初学者添加一个更好的例子,如上所述,ModelForm没有TextFile,如果你需要使用它,对于OP的情况,应该是:

first_name = forms.CharField(
     widget=forms.TextInput(attrs={'placeholder': 'first name'}),
     label=_(u'First name'), 
     required=False)

如果你确实需要textarea字段来描述或评论,那么你可以使用Textarea小部件:

description = forms.CharField(
     widget=forms.Textarea(attrs={'placeholder': 'Please enter the  description'}))

答案 3 :(得分:0)

forms.TextField不存在,请查看您引用的文档,它仅适用于模型。

你可以通过查看实际的django source django / forms / fields.py来证明这一点。

您必须在评论中使用CharField和widget = forms.TextArea。

答案 4 :(得分:0)

只需使用forms.Textarea而不是forms.TextInput