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
Любая идея?
Ответы
Ответ 1
CharField
может быть тем, что вы ищете.
РЕДАКТИРОВАТЬ: Чтобы уточнить, в документах указывается TextField
в качестве типа поля модели. Вы не можете использовать его как поле формы. table, который указывает OP, указывает, что a TextField
в модели представлен как CharField
(с widget=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, как вы говорите в своих комментариях.