django.forms中缺少TextField

zVi*_*tor 54 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'))
Run Code Online (Sandbox Code Playgroud)

它给了我一个" 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          
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Uma*_*ang 87

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

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

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

  • 是的,但这些字段是**模型的字段**而不是**表单**. (14认同)
  • 不,我想要一个文本区域,而不是文本输入。根据 https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#field-types: TextField 是一个带有 widget=forms.Textarea 的 CharField (2认同)

tee*_*ane 59

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

class ContactForm(forms.Form):
    message = forms.CharField(widget=forms.Textarea)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。另一个实际上并没有回答大多数来这里的人的问题:*如何在表单中添加文本字段!* (4认同)