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
有什么想法吗?
答案 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
。