폼을 직접 만들어서 데이터를 처리한 적이 있다. 

폼의 작동 원리를 알았다면 활용도 높은 모델 폼(ModelForm)을 통해 데이터를 처리하는 방법을 알아본다.

* 모델 폼 작성요령(https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/)은 이곳에서 살펴보면 된다.


웹사이트에서 모델 폼을 통해 입력 받은 데이터를 view에서 어떻게 처리하는지는 
여기(https://docs.djangoproject.com/en/1.10/topics/forms/)에 설명이 되어있다.


나의 목표는 

1) 웹사이트에 모델 폼을 만들어서 데이터를 입력 받을 수 있도록 만들고
2) 모델 폼을 통해 입력 받은 데이터데이터베이스에 저장하도록 한다 (단, 조건에 부합한 경우저장, 아니면 재작성)


1-1) forms.py에서 Character 모델 클래스를 반영한 모델 폼 클래스를 만든다.

1
2
3
4
5
6
7
8
9
class CharacterForm(ModelForm):
     class Meta:
         model = Character
         fields = (
             'user',
             'name',
             'type',
             'gender'
         )
cs


1-2) View에서 만들어진 모델 폼호출하여 템플릿에 전달한다. 
   
1
2
3
4
5
def index(request):
    ctx = {}
    if request.method == "GET":
        form = CharacterForm()
        ctx.update({ "form" : form })
cs


GET 방식일 때, 빈 폼변수에 담아 템플릿으로 보낸다. 
폼이 비어있는 상태에서 데이터를 입력 받을 수 있도록 하기 위함이다. 
(템플릿에서 직접 폼을 만드는 번거로움이 확연히 줄었다)



2) 폼을 통해 입력 받은 데이터를 View에서 처리하여 데이터베이스에 저장한다.

 

(웹사이트에서 폼을 통해 데이터가 전송된 상황) POST 요청일때, request로부터 데이터를 가져와 폼 인스턴스를 만든다.

- *폼은 데이터가 입력된 폼 인스턴스에 대한 유효성 검사(데이터베이스 필드조건 부합)를 할 수 있다.

- Partner 클래스에 user 필드를 제외한 name, contact, address, description 필드에만 데이터를 입력 받은 상태이다.

- 인스턴스는 비어있는 필드가 있으면 데이터베이스에 저장하지 않는 경우가 발생한다.

- 아니면 저장하기 전직접 필드에 데이터를 입력하여 최종 저장시킨다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
def index(request):
    ctx = {}
    if request.method == "GET":
        form = CharacterForm()
        ctx.update({ "form" : form })
    elif request.method == "POST":
        form = CharacterForm(request.POST)
        if form.is_valid():
            character = form.save(commit=False)
            character.user = request.user
            character.save()
            return redirect("/character/")
        else:
            ctx.update({ "form" : form })
cs


2-1) 데이터를 저장하므로 POST 방식을 사용하고, 데이터를 입력 받은 폼변수로 지정한다.

 

2-2) form.is_valid()를 통해 입력된 데이터의 유효성 검사를 한다. 올바르지 않으면 재작성한다.


2-3) user 값은 직접 입력하는 것이 아니므로 별도로 채워서 최종 저장을 한다.

블로그 이미지

쵸잇

,