我在一個Django的形式Django的定製表單標籤
這個自定義標籤有一個問題,就是在文件contact_form.py形式代碼:
from django import forms
class ContactForm(forms.Form):
def __init__(self, subject_label="Subject", message_label="Message", email_label="Your email", cc_myself_label="Cc myself", *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['subject'].label = subject_label
self.fields['message'].label = message_label
self.fields['email'].label = email_label
self.fields['cc_myself'].label = cc_myself_label
subject = forms.CharField(widget=forms.TextInput(attrs={'size':'60'}))
message = forms.CharField(widget=forms.Textarea(attrs={'rows':15, 'cols':80}))
email = forms.EmailField(widget=forms.TextInput(attrs={'size':'60'}))
cc_myself = forms.BooleanField(required=False)
的觀點我在看起來像使用此:
def contact(request, product_id=None):
.
.
.
if request.method == 'POST':
form = contact_form.ContactForm(request.POST)
if form.is_valid():
.
.
else:
form = contact_form.ContactForm(
subject_label = "Subject",
message_label = "Your Message",
email_label = "Your email",
cc_myself_label = "Cc myself")
用於初始化標籤最終將依賴於語言,即英語,荷蘭語,法語等字符串的字符串
當我測試不發送電子郵件,而不是重定向頁面的形式返回形式:
<QueryDict: {u'cc_myself': [u'on'], u'message': [u'message body'],
u'email':[u'[email protected]'], u'subject': [u'test message']}>:
其中標的標籤是以前。這顯然是代表表單字段及其內容的字典。
當我更改文件contact_form.py到:
from django import forms
class ContactForm(forms.Form):
"""
def __init__(self, subject_label="Subject", message_label="Message", email_label="Your email", cc_myself_label="Cc myself", *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['subject'].label = subject_label
self.fields['message'].label = message_label
self.fields['email'].label = email_label
self.fields['cc_myself'].label = cc_myself_label
"""
subject = forms.CharField(widget=forms.TextInput(attrs={'size':'60'}))
message = forms.CharField(widget=forms.Textarea(attrs={'rows':15, 'cols':80}))
email = forms.EmailField(widget=forms.TextInput(attrs={'size':'60'}))
cc_myself = forms.BooleanField(required=False)
即禁用初始化,然後一切正常。表單數據通過電子郵件發送,重定向頁面顯示。所以很顯然,init代碼是不正確的。但是什麼?
我真的很感謝一些幫助。
什麼將__init__期望的數據參數?因爲當我添加這個數據參數時__init__抱怨想要2個非關鍵字參數,但只獲得1.因此,在創建表單對象時應該爲數據提供什麼參數? – Henri 2010-04-30 11:55:27
你也應該通過它超級初始化。 this:super(ContactForm,self).__ init __(* args,** kwargs) 應改爲:super(ContactForm,self).__ init __(data,* args,** kwargs)。我更新了我的答案。 – vinilios 2010-04-30 16:01:44
那麼如何創建表單呢?因爲現在創建一個ContactForm對象還需要一個參數傳遞給數據。 form = ContactForm(data = ...數據的參數是什麼?我認爲它可能是request.POST,但是最初的表單會報告缺少的所有必填字段。 – Henri 2010-04-30 22:45:42