第一步:首先在models.py中定義一個表單模型
subject = forms.CharField(max_length=100 ,label='留言標題')
mail = forms.EmailField(label='電子郵件')
topic = forms.ChoiceField(choices=TOPIC_CHOICES,label='選擇評分')
message = forms.CharField(label='留言內容',widget=forms.Textarea)
cc_myself = forms.BooleanField(required=False ,label='訂閱該貼')
那個topic中的choices需要在models.py中定義一個數組.
('leve1', '差評'),
('leve2', '中評'),
('leve3', '好評'),
)
這樣,之後在html顯示的表單就採用這個模型的數據了。
另外還有一種定義表單模型的方式,那就是直接繼承另一個models。如果我們在models裏設計數據庫時,已經設計好了一個類(就是數據庫的表)之後想複用這個類的信息來作爲表單的模型,那麼很簡單,同樣是在models中的一個類
#訂單編號
OrderID = models.ForeignKey(OrderInfo)
#//廣告標題#
Title = models.CharField(max_length = 36)
#//廣告內容#
Content = models.CharField(max_length = 600)
然後怎麼關聯呢?
需要導入一個新的類 (ModelForm)
from django.forms import ModelForm
class Meta:
model = Advertisement
fields = ('Title', 'CustomerID')
這裏的Advertisement就是之前那個ORM的模型。
第二步:OK,繼續我們的表單,下一步需要做什麼呢?開始在views.py裏寫對錶單的調用吧.
if request.method == 'POST': # 如果表單被提交
form = ContactForm(request.POST) # 獲取Post表單數據
if form.is_valid(): # 驗證表單
return HttpResponseRedirect('/') # 跳轉
else:
form = ContactForm() #獲得表單對象
return render_to_response('message.html', {
'form': form,
})
整個代碼很簡單,我就不過多的解釋了。
第三步:我們知道django裏任何訪問都是通過urls.py來管理的。所以下面我們需要配置一個路徑。
第四步:最後應該是建立一個模板的時候了,因爲我們最終是輸出到html上的.注意views的remark函數最後一行
'form': form,
})
就是講當前的表單對象輸出到message.html裏,自動生成一個表單。
所以,先構建一個html.
這個html模板很簡單,除去不必要的CSS,我只給出核心部分好啦。
{% for field in form %}
<div class="fieldWrapper">
{{ field.label_tag }}:{{ field }}
{{ field.errors }}
</div>
{% endfor %}
<div class="fieldWrapper"><p><input type="submit" value="留言" /></p></div>
</form>
{% for field in form %}
{% endfor %}
用於對錶單對象裏的元素進行遍歷,然後通過
{{ field.label_tag }}
{{ field }}
{{ field.errors }}
這三個標籤來輸出,注意{{ field.errors }}默認情況下是不會輸出的,只有當驗證表單正確性時纔會輸出內容。
最終我們通過
http://youdjangourl/message來訪問這個例子