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:
    	...
    	#     ,  
    

    좋은 웹페이지 즐겨찾기