Подтвердить что ты не робот

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

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          

Любая идея?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

Просто хочу добавить лучший пример для начинающих, таких как я, как и все упомянутые выше, для TextForm нет 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'}))

Ответ 4

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

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

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