TextField отсутствует в django.forms - PullRequest
       0

TextField отсутствует в django.forms

52 голосов
/ 05 сентября 2011
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          

Есть идеи?

Ответы [ 4 ]

85 голосов
/ 05 сентября 2011

CharField может быть тем, что вы ищете.

РЕДАКТИРОВАТЬ: Чтобы уточнить, документы упоминают TextField кактип поля модели.Вы не можете использовать его в качестве поля формы.Таблица , на которую указал OP, указывает, что TextField в модели представляется как CharFieldwidget=forms.Textarea) в соответствующей ModelForm.Тогда я хотел бы представить, что нет поля формы с Textarea в качестве виджета по умолчанию.

Если бы я догадался, почему Django сделал этот выбор, я бы сказал, что наличие двух полей, отличающихся тольковиджеты, которые они используют, не в том виде, в котором они хранятся, проверяются и т. д., люди в Django могут счесть бесполезными, и поэтому вам придется вручную изменить виджет.

53 голосов
/ 17 марта 2013

Если вам нужна текстовая область, вы можете использовать forms.CharField с виджетом forms.TextArea.

class ContactForm(forms.Form):
    message = forms.CharField(widget=forms.Textarea)
1 голос
/ 21 апреля 2015

Просто хочу добавить лучший пример для начинающих, таких как я, как уже упоминалось выше, TextFile для ModelForm не существует, и если вам нужно его использовать, для случая ОП должно быть:

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'}))
0 голосов
/ 05 сентября 2011

forms.TextField не существует, ознакомьтесь с документацией, на которую вы ссылаетесь, это только для моделей.

Вы можете доказать это сами, посмотрев фактический исходный код django django / forms / fields.py.

Вы должны использовать CharField с widget = forms.TextArea, как вы говорите в своих комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...