請幫助我瞭解我做出的以下選擇是慣用/好還是不好,如何改進。將Django模型驗證錯誤轉換爲表單的慣用方法
1)模型驗證了表單驗證
我更喜歡儘可能因爲它似乎更乾和基本方法來創建數據規則表單驗證使用新model validation。一個簡單的日曆入門車型的兩個例子:
- 「開始必須在結束之前」
- 「期間必須小於(最終開始)」
是它慣用/好把這些放在模型層面,這樣他們就不必被放入表單了?如果ModelForm是最好的答案,那麼在同一個表單中使用多個模型的情況呢?
(編輯:我不知道,多ModelForms實際上可以一起使用)
2)傳輸模型驗證一個表單(未的ModelForm)
(編輯:原來重塑在我的情況下,模型驗證和表單驗證之間不需要管道連接,下面的解決方案顯示了原因)
假設我們有任何模型驗證錯誤可以直接傳輸並直接顯示給用戶(即忽略翻譯模型驗證錯誤到用戶友好的表單驗證錯誤)。
這是我想出了做一個工作方式(在同一個地方,沒有輔助功能):
view_with_a_form:
...
if form.is_valid():
instance = ...
...
#save() is overridden to do full_clean with optional exclusions
try: instance.save()
except ValidationError e:
nfe= e.message_dict[NON_FIELD_ERRORS]
#this is one big question mark:
instance._errors['__all__'] = ErrorList(nfe)
#this is the other big question mark. seems unnatural
if form.is_valid()
return response...
... #other code in standard format
#send the user the form as 1)new 2)form errors 3)model errors
return form
如上代碼註釋:
一)難道這是一個習慣用法/好將模型錯誤轉移到表單的方法?
b)這是測試新「表單」錯誤的慣用/好方法嗎?
注意:本示例使用非現場錯誤,但我認爲它同樣適用於現場錯誤。
我改變了選定的答案,因爲從斯特凡諾的更新實際上說服我去適應另一種方法([這裏組合的ModelForms方法之一](http://stackoverflow.com/questions/569468/django-multiple-models而不需要重新建模模型驗證和表單驗證之間的管道。(我不知道他們可以合併)。克里斯的回答對我的理解也很好。 – KobeJohn