Django의 모델 객체 검증

3358 단어 #Django
모델 객체 검증
모델을 검증하려면 다음 세 단계를 수행합니다.
4
  • 모델을 검증하는 필드 - Model.clean_fields()

  • 4
  • 모델의 무결성을 검증하는 모델.clean()

  • 4
  • 모델의 유일성을 검증하는 모델.validate_unique()

  • 모형의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 제약은 검사하지 않습니다.

    좋은 웹페이지 즐겨찾기