76 votes

TextField manquant dans 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'))
 

Il me donne un " AttributeError: l'objet 'module' n'a pas d'attribut 'TextField' . Tout semble aller bien, sauf le TextField manquant:

 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          
 

Une idée?

96voto

Umang Points 2227

CharField pourrait être ce que vous cherchez.

EDIT: Pour clarifier, les docs mentionner TextField comme un modèle type de champ. Vous ne pouvez pas l'utiliser comme un champ de formulaire. Le tableau que l'OP a souligné indique qu'un TextField dans un modèle est représenté comme un CharField (avec widget=forms.Textarea) dans une ModelForm. J'imagine, alors, qu'il n'existe pas de champ de formulaire avec Textarea comme valeur par défaut du widget.

Si je devais deviner pourquoi Django fait ce choix, je dirais que le fait d'avoir deux champs qui ne diffèrent que dans le widget qu'ils utilisent, non pas dans le type de données stockées, validation, etc. peut être considéré comme inutile par le peuple à Django et par conséquent, vous devez modifier manuellement le widget.

94voto

teewuane Points 1383

Si vous voulez une zone de texte, vous pouvez utiliser le forms.CharField avec le widget forms.TextArea.

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

0voto

Rob Osborne Points 2236

forms.TextField n'existe pas, consultez la documentation à laquelle vous vous référez, c'est uniquement pour les modèles.

Vous pouvez le prouver par vous-même en consultant la source django réelle django / forms / fields.py.

Vous devez utiliser CharField avec widget = forms.TextArea comme vous le dites dans vos commentaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X