Django 신규 레코드 및 데이터 검증
8532 단어 Django
Django가 새로운 기록을 추가하고 데이터를 검증하는 방식에 대해 공식 문서에서 데이터 검증은 세 단계로 나뉜다.
Model.clean_fields()
Model.clean()
Model.validate_unique()
그 중에서
Model.clean_fields()
검증 필드, 예를 들어 길이 형식 등;Model.clean()
사용자 정의 검증 조건과 오류 정보;Model.validate_unique()
검증을 위해 추가된 유일한 제약.이 3단계 검증은 full_clean()
를 호출해서 실행할 수 있습니다.ModelForm
를 사용하여 데이터를 검증할 때 is_valid()
방법을 사용할 수 있습니다. 이 방법은 상기 3단계 검증을 포함하지만 save()
방법을 사용할 때 자동으로 검증되지 않습니다.따라서 기록을 추가하거나 수정하기 전에 save()
방법을 사용하기 전에 full_clean()
방법을 사용해야 한다.또한 새 기록을 추가할 때 create()
사용하면 사용자 정의 검사를 하지 않을 것 같습니다.개인은 필드를 정의할 때 유일한 제약을 정의하지 않았고 사용자 정의 검증에서 유일한 제약이 있는지 아닌지를 판단할 때 오류가 발생하지 않았습니다. 검증 방법은 다음과 같습니다. 부적절하면 바로잡아 주십시오.# IP
def clean(self):
if self.ip_addr:
if Info.objects.filter(ip_addr__exact=self.ip_addr, status=True):
raise ValidationError(_(u'%s IP ' % self.ip_addr))
if Info.objects.filter(equit_name__exact=self.equit_name, status=True):
raise ValidationError(_(u'%s ' % self.equit_name))
이렇게 새로운 기록을 쓸 때는 문제가 없지만 갱신할 때
form
를 사용할 때form.is_valid()
방법으로 검사하면 유일성 충돌이 발생할 수 있으므로 개인의 해결 방법은 IP와 장치 이름에 변화가 있는지 판단하고 둘 다 변화가 있으면 사용하기form.is_valid()
하나만 변화가 있으면 스스로 판단한다수요상 IP 주소와 상태를 통해 유일성을 판단해야 하기 때문에 장치가 정지된 상태에서 IP를 다시 사용할 수 있다면 장치 이름은 같다.Fibre 트랜시버 등 IP 없는 디바이스가 있는 경우 디바이스 이름을 통해 고유 여부를 판단합니다.Model에서 이러한 검사를 하면 View에서 기록을 업데이트할 때 유일한 오류를 보고할 수 있기 때문에 같은 IP나 같은 장치 이름을 사용하는 검사가 View에 존재하는지 판단합니다. 검사의 절차는 다음과 같습니다.
Created with Rapha l 2.2.0 시작 form 양식 또는 excel 가져오기 IP가 비어 있지 않고 이 IP가 존재하며 이 IP 장치는 이 장치를 사용하고 있고 장치는 상급 교환기 IP가 존재하며 포트가 사용되고 있으며 이 장치의 현재 상태는 추가 또는 수정 레코드 yes no yes no yes no yes no
장치 이름은 Model에서 필수 필드이므로
form.is_valid()
또는 full_clean()
로 확인합니다.레코드 섹션 확인 코드를 수정하려면 다음과 같이 하십시오.#
error_msg = ''
form = EquitForm(request.POST)
if form.is_valid():
# IP
if equit.ip_addr != request.POST.get('ip_addr', ''):
if request.POST.get('ip_addr', ''):
if Equit.objects.filter(ip_addr__exact=request.POST.get('ip_addr', ''), status=True) and equit.status:
error_msg = u'IP '
if equit.equit_name != request.POST.get('equit_name', ''):
if Equit.objects.filter(equit_name__exact=request.POST.get('equit_name', ''), status=True) and equit.status:
error_msg = u' '
if error_msg:
...
# ,
else:
...
#
else:
...
# ,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.