Django中 form表單的使用

from django import forms

第一步:首先在models.py中定義一個表單模型

class RemarkForm(forms.Form):
        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中定義一個數組.
TOPIC_CHOICES = (
        ('leve1', '差評'),
        ('leve2', '中評'),
        ('leve3', '好評'),
)

這樣,之後在html顯示的表單就採用這個模型的數據了。

另外還有一種定義表單模型的方式,那就是直接繼承另一個models。如果我們在models裏設計數據庫時,已經設計好了一個類(就是數據庫的表)之後想複用這個類的信息來作爲表單的模型,那麼很簡單,同樣是在models中的一個類
class Advertisement(models.Model): 
  #訂單編號
  OrderID    =     models.ForeignKey(OrderInfo)
  #//廣告標題#
  Title    =    models.CharField(max_length = 36) 
  #//廣告內容#
  Content    =    models.CharField(max_length = 600)
注意,他的類型是models.Model,是做數據庫ORM用的。

然後怎麼關聯呢?
需要導入一個新的類 (ModelForm)
from django.forms import ModelForm

class ContactForm(ModelForm):
  class Meta:
    model = Advertisement
    fields = ('Title', 'CustomerID')

這裏的Advertisement就是之前那個ORM的模型。


第二步:OK,繼續我們的表單,下一步需要做什麼呢?開始在views.py裏寫對錶單的調用吧.
def remark(request):


        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來管理的。所以下面我們需要配置一個路徑。

  (r'^message', 'iring.views.remark'),

第四步:最後應該是建立一個模板的時候了,因爲我們最終是輸出到html上的.注意views的remark函數最後一行
        return render_to_response('message.html', {
                'form': form,
        })

就是講當前的表單對象輸出到message.html裏,自動生成一個表單。
所以,先構建一個html.
這個html模板很簡單,除去不必要的CSS,我只給出核心部分好啦。
  <form action="/message/" method="POST">
    {% 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來訪問這個例子








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章