Django의 모델 객체 검증
모델을 검증하려면 다음 세 단계를 수행합니다.
4
4
4
모형의full 호출clean () 방법이 있을 때, 이 세 가지 방법이 모두 실행될 것입니다.ModelForm을 사용할 때 isvalid()는 양식의 모든 필드에 대해 이러한 유효성 검사를 수행합니다.검증에 오류가 발생했거나 검증이 필요한 필드를 ModelForm에서 제거할 계획이 있다면, 모델의full 을 호출하십시오.clean () 방법입니다.
Model.full_clean(exclude=None, validate_unique=True)
이 방법은 순서대로 Model을 호출합니다.clean_fields()、Model.clean() 및 Model.validate_unique () (validate unique가 True인 경우) 이상 메시지dict 속성은 세 단계의 모든 오류를 포함합니다.선택할 수 있는 exclude 매개 변수는 검증과 제거에서 제외할 수 있는 필드 이름의 목록을 제공합니다.ModelForm은 사용자가 이 필드의 오류를 수정할 수 없기 때문에 폼에 나타나지 않은 필드를 제거하기 위해 이 인자를 사용합니다.모형의save() 방법을 호출할 때fullclean () 은 자동으로 호출되지 않습니다.한 걸음에 당신이 직접 만든 모델을 검증할 수 있다면, 수동으로 그것을 호출해야 합니다.예를 들면 다음과 같습니다.
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.'})
...
마지막,fullclean()은 모델의 고유한 구속을 검사합니다.
Model.validate_unique(exclude=None)
이 방법은 cleanfields ()는 유사하지만, 단지 하나의 필드의 값이 아니라 모델의 모든 유일한 제약을 검증할 뿐입니다.선택할 수 있는 exclude 매개 변수는 검증에서 제외할 필드 이름의 목록을 제공합니다.필드 유효성 검사에 실패하면 ValidationError가 발생합니다.주의, 만약 exclude 매개 변수를validate 에 제공한다면unique (), 한 필드에 관련된 모든 uniquetogether 제약은 검사하지 않습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.