본문 바로가기
Django

Django [관리자 페이지] admin site 유효성 검사

by nyanguk 2021. 1. 31.

vaildation 유효성 검사

입력 폼을 통해 데이터가 들어왔을때 알맞은 자료형인지, 글자수 등등 유효성을 검사한다 이후  form.cleaned_data에 저장되고 그 다음 파이썬으로 알맞게 변환이 되는 것이다. 즉, 제출 버튼을 눌렀을때 데이터 베이스에 저장이 되는 것이아니라 한번 form에서 저장되기 때문에 기본적인 유효성 검사가 아닌 데이터가 써지기 전에 특별한 유효성 검사가 필요할때 사용될 수 있다.  

 

forms.py 생성하기 

유효성 검사를 하기위해서는 forms.py를 생성해야한다. 왜냐하면 입력 폼에서 데이터 들어오고 그것을 조작하거나 앞서 이야기 한것 처럼 커스텀하는 것은 forms.py에서 행해지기 때문이다. 디폴트를 사용하고자 한다면 forms.py없이 사용하면된다.

위치는 post 디렉토리 안(admin.py와 동등한 위치)에 생성하면된다.

 

forms.py 작성하기

어느 하나의 필드에 대해서 유효성 검사를 하고자 할때 cleaned_[필드명]으로 class 이름을 설정해야만 한다.

그리고 form.cleaned_data 에 저장된 데이터를 열람하고자 할때 data = form.cleaned_data["필드명"]을 통해 반환 되는 값을 새로운 변수에 담아야 한다.

 

본문에 해당 하는 글이 쓰여질때 특정 단어를 쓰지못하도록 해보자 

forms.py를 아래와 같이 생성한다.

# Custom_admin/post/forms.py
from django import forms
class MyPostAdminForm(forms.ModelForm):
    def clean_content(self):
        content = self.cleaned_data["content"]
        words = ['금지어','욕설','관리자']
        error_msg = '{0} {1} 같은 단어는 쓸 수 없습니다.'.format(', '.join(words),'와')

        if any(word in content for word in words):
            raise forms.ValidationError(error_msg)
            
        return content
        

admin.py에는 아래의 코드를 추가해준다.

from post.forms import MyPostAdminForm
# Register your models here.
class PostAdmin(admin.ModelAdmin):
    form = MyPostAdminForm
    ...

 

 

참조 공식문서

 

https://docs.djangoproject.com/en/1.11/ref/forms/validation/

https://docs.djangoproject.com/en/3.0/topics/forms/