亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

怎么在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

韶关市| 大兴区| 永嘉县| 霍州市| 太康县| 龙口市| 乌鲁木齐县| 祁连县| 信宜市| 阳信县| 长武县| 安庆市| 甘南县| 镇宁| 牙克石市| 长兴县| 峨山| 苗栗市| 富源县| 万盛区| 交口县| 遂川县| 彩票| 衡南县| 法库县| 广元市| 交口县| 连城县| 视频| 成武县| 贡觉县| 梁山县| 乳源| 延长县| 江口县| 日喀则市| 特克斯县| 韩城市| 开封市| 永丰县| 敖汉旗|