2011-09-05 57 views
41
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')) 

Nó mang lại cho tôi một "AttributeError: 'module' đối tượng không có thuộc tính 'TextField' Tất cả mọi thứ có vẻ là ok, ngoại trừ TextField mất tích:.TextField mất tích trong django.forms

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   

Bất kỳ ý tưởng?

+2

'forms.TextInput' không phải là những gì bạn cần? – Nemoden

+1

Không. TextInput là tiện ích được sử dụng bởi trường. – zVictor

Trả lời

70

CharField có thể là những gì bạn đang tìm kiếm.

ED IT: Để làm rõ, các tài liệu đề cập đến TextField làm kiểu trường mô hình. Bạn không thể sử dụng nó làm trường biểu mẫu. Các table rằng OP chỉ ra rằng một TextField trong một mô hình được đại diện như là một CharField (với widget=forms.Textarea) trong một ModelForm tương ứng. Tôi sẽ tưởng tượng, sau đó, rằng không có trường mẫu với Textarea làm tiện ích mặc định của nó.

Nếu tôi đoán tại sao Django đưa ra lựa chọn này, tôi sẽ nói rằng có hai trường chỉ khác nhau trong tiện ích con sử dụng, không phải trong loại dữ liệu được lưu trữ, xác thực, v.v. mọi người ở Django và do đó bạn phải tự thay đổi tiện ích con.

+1

Không. Tôi muốn một vùng văn bản chứ không phải textinput. Theo https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#field-types: TextField là một CharField với widget = forms.Textarea – zVictor

+0

Có vẻ như với tôi, sau đó, bạn vừa trả lời câu hỏi của riêng bạn. Có vẻ như không có trường nào có Textarea làm tiện ích mặc định. Trừ khi bạn cung cấp độ dài tối đa hoặc tối thiểu, tất cả đầu vào đều hợp lệ, theo tài liệu. – Umang

+0

Không. Bạn không thấy TextField trong [bảng] này (https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#field-types)? – zVictor

0

biểu mẫu.TextField không tồn tại, hãy xem tài liệu bạn tham chiếu, nó chỉ dành cho các mô hình.

Bạn có thể chứng minh điều này cho chính mình bằng cách xem nguồn django thực tế django/forms/fields.py.

Bạn phải sử dụng CharField với widget = forms.TextArea như bạn nói trong nhận xét của mình.

+1

Tôi không thấy bất kỳ chỗ nào trong tài liệu nói rằng có một 'forms.TextField'. Có một 'models.TextField' và tôi làm [xem nó trong tài liệu] (https://docs.djangoproject.com/en/1.3/ref/models/fields/#textfield). – Umang

+3

Đây không phải là lỗi tài liệu vì không có tài liệu nào đề cập đến biểu mẫu.TextField. –

42

Nếu bạn muốn một vùng văn bản, bạn có thể sử dụng biểu mẫu.CharField với tiện ích forms.TextArea.

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

Đây phải là câu trả lời được chấp nhận.Người khác không thực sự trả lời câu hỏi mà hầu hết mọi người đến đây đều có: * Cách thêm trường văn bản vào biểu mẫu của bạn! * – Serafeim

1

Chỉ muốn thêm một ví dụ tốt cho người mới bắt đầu như tôi, như tất cả đã nói ở trên, không có textfile cho ModelForm, và nếu bạn cần phải sử dụng nó, đối với trường hợp của OP phải nộp là:

first_name = forms.CharField(
    widget=forms.TextInput(attrs={'placeholder': 'first name'}), 
    label=_(u'First name'), 
    required=False) 

Và nếu bạn cần một lĩnh vực textarea cho mô tả hoặc nhận xét, sau đó bạn có thể sử dụng textarea phụ tùng:

description = forms.CharField(
    widget=forms.Textarea(attrs={'placeholder': 'Please enter the description'})) 
Các vấn đề liên quan