91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Django框架中實現model模型對象驗證

發布時間:2021-04-13 16:23:06 來源:億速云 閱讀:196 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關怎么在Django框架中實現model模型對象驗證,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

模型對象的驗證

驗證一個模型涉及三個步驟:

  • 驗證模型的字段 —— Model.clean_fields()

  • 驗證模型的完整性 —— Model.clean()

  • 驗證模型的唯一性 —— Model.validate_unique()

當調用模型的full_clean() 方法時,這三個方法都將執行。當使用ModelForm時,is_valid() 將為表單中的所有字段執行這些驗證。如果你計劃自己處理驗證出現的錯誤,或者你已經將需要驗證的字段從ModelForm 中去除掉,你只需調用模型的full_clean() 方法。

Model.full_clean(exclude=None, validate_unique=True)

該方法按順序調用Model.clean_fields()、Model.clean() 和Model.validate_unique()(如果validate_unique 為True),并引發一個ValidationError,該異常的message_dict 屬性包含三個步驟的所有錯誤。可選的exclude 參數用來提供一個可以從驗證和清除中排除的字段名稱的列表。ModelForm 使用這個參數來排除表單中沒有出現的字段,使它們不需要驗證,因為用戶無法修正這些字段的錯誤。注意,當你調用模型的save() 方法時,full_clean() 不會 自動調用。如果你想一步就可以為你手工創建的模型運行驗證,你需要手工調用它。例如:

from django.core.exceptions import ValidationError
try:
  article.full_clean()
except ValidationError as e:
  # Do something based on the errors contained in e.message_dict.
  # Display them to a user, or handle them programmatically.
  pass

full_clean() 第一步執行的是驗證每個字段。

Model.clean_fields(exclude=None)

這個方法將驗證模型的所有字段。可選的exclude 參數讓你提供一個字段名稱列表來從驗證中排除。如果有字段驗證失敗,它將引發一個ValidationError。

full_clean() 第二步執行的是調用Model.clean()。如要實現模型自定義的驗證,應該覆蓋這個方法。

Model.clean()

應該用這個方法來提供自定義的模型驗證,以及修改模型的屬性。例如,你可以使用它來給一個字段自動提供值,或者用于多個字段需要一起驗證的情形:

import datetime
from django.core.exceptions import ValidationError
from django.db import models
class Article(models.Model):
  ...
  def clean(self):
    # Don't allow draft entries to have a pub_date.
    if self.status == 'draft' and self.pub_date is not None:
      raise ValidationError('Draft entries may not have a publication date.')
    # Set the pub_date for published items if it hasn't been set already.
    if self.status == 'published' and self.pub_date is None:
      self.pub_date = datetime.date.today()

Model.full_clean() 類似,調用模型的save() 方法時不會引起clean() 方法的調用。

在上面的示例中,Model.clean() 引發的ValidationError 異常通過一個字符串實例化,所以它將被保存在一個特殊的錯誤字典鍵NON_FIELD_ERRORS中。這個鍵用于整個模型出現的錯誤而不是一個特定字段出現的錯誤:

from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
try:
  article.full_clean()
except ValidationError as e:
  non_field_errors = e.message_dict[NON_FIELD_ERRORS]

若要引發一個特定字段的異常,可以使用一個字典實例化ValidationError,其中字典的鍵為字段的名稱。我們可以更新前面的例子,只引發pub_date 字段上的異常:

class Article(models.Model):
  ...
  def clean(self):
    # Don't allow draft entries to have a pub_date.
    if self.status == 'draft' and self.pub_date is not None:
      raise ValidationError({'pub_date': 'Draft entries may not have a publication date.'})
    ...

最后,full_clean() 將檢查模型的唯一性約束。

Model.validate_unique(exclude=None)

該方法與clean_fields() 類似,只是驗證的是模型的所有唯一性約束而不是單個字段的值。可選的exclude 參數允許你提供一個字段名稱的列表來從驗證中排除。如果有字段驗證失敗,將引發一個 ValidationError。

注意,如果你提供一個exclude 參數給validate_unique(),任何涉及到其中一個字段的unique_together 約束將不檢查。

關于怎么在Django框架中實現model模型對象驗證就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临西县| 博罗县| 壤塘县| 南通市| 常德市| 莱西市| 闵行区| 微博| 鲁甸县| 孟州市| 石河子市| 稷山县| 五华县| 东宁县| 兴海县| 东安县| 襄汾县| 伊川县| 林芝县| 宁夏| 武乡县| 云安县| 长沙市| 汽车| 车致| 栾城县| 定襄县| 桐庐县| 榆树市| 辽阳县| 保定市| 砚山县| 宜城市| 黎川县| 区。| 桐柏县| 通化市| 富川| 临武县| 河西区| 广昌县|