Django Web Framework/Django Form for Web

ModelForm 기본형

bluebamus 2021. 7. 2.
class BoardForm(forms.ModelForm):
    class Meta:    
        model = Board 
        # field = ['title', 'content',] 
        fields = '__all__' 
        widgets = {
            'title': forms.TextInput(attrs={
                'placeholder': "제목을 입력하세요!",
                'class': 'title'
            }),
            'content': forms.Textarea(attrs={
                'placeholder': '내용을 입력하세요!',
                'class': 'content',
                'rows': 5,
                'cols': 50
            }),
        }
        error_messages = {
            'title': {
                'required': '제목을 입력하지 않았습니다.'
            },
            'content': {
                'required': '내용은 공란이 될 수 없습니다.'
            },
        }

meta에 기본적인 항목들을 설정하면된다.

모델폼 사용시 입력값 검증이 자동으로 처리가 되기 때문에

cleaned_data을 받아 모델 오브젝트를 생성할 필요 없이 바로 저장을 하면된다.

 

예시 : 

if form.is_valid():
	board = form.save() # form에는 검증된 데이터만 존재하므로 save()로 모델 객체를 받을 수 있다.
	return redirect('boards:detail', board.pk)

 

일반폼과 모델폼은 업데이트 구현시 초기값을 주는 방법이 다르다

 

일반폼

form = BoardForm(initial=board.__dict__)

모델폼

form = BoardForm(instance=board)

 

 

모델폼은 post로 전달받은 데이터를 instance를 사용하여 해당 model로 받을 수 있다.

form = BoardForm(request.POST, instance=board)

 

request.POST인자 없이 instance에 수정할 model 객체만 전달하게 되면 modelform에 등록한 meta 정보를 이요해

값을 바인딩해준다.

form = BoardForm(instance=board)

 

댓글