2010-08-05 41 views
2

我讀過Django文檔在這裏: http://docs.djangoproject.com/en/dev/ref/forms/validation/我需要一些幫助理解Django的形式驗證

我也瀏覽了一些關於谷歌和堆棧溢出的搜索結果,但我一直沒能在下面回答我的問題。

舉一個例子,假設我有一個名爲「Widgets」的模型,其中包含名爲「product_name」的CharField。現在說我想將「product_name」中的允許字符限制爲[a-zA-Z0-9]加上撇號,破折號和下劃線(即' - _),並在用戶輸入受限字符時向用戶顯示錶單錯誤。

從上述研究中,我收集到我需要創建一個驗證函數來檢查這些字符。

我的具體問題:
1.什麼是最好的做法是到這樣一個驗證函數應該活在我的Django項目?
2.我從哪裏調用此驗證功能?
3.如果輸入「壞」字符,我如何向用戶顯示錯誤?
4.有人會發布樣本驗證功能嗎?

謝謝,我感謝您可以提供的任何幫助。

回答

2

如果可以,請和Chefsmart一起回答。下面是一個樣本驗證功能的例子,以幫助它:

class MyCustomInvoiceForm(forms.Form): 
    serial_number = forms.IntegerField(min_value = 1, initial = 1) 
    # Other fields. I am interested in serial_number. 

    def clean_serial_number(self): 
     serial_number = self.cleaned_data.get('serial_number') 
     if not serial_number: 
      return 

     return _my_custom_validation(serial_number) 

    def _my_custom_validation(self, serial_number): 
     serial_number = int(serial_number) 
     if not ((serial_number - 1) % 10 == 0): 
      message = "Serial number should be 1 or one greater than a multiple of 10 (Example: 1, 11, 21 etc.)" 
      raise forms.ValidationError(message) 
     return serial_number 

這是我從一個項目的代碼片段。客戶需要一些有趣的序列號驗證邏輯。