220121 TIL

CoderS·2022년 1월 21일
0

TIL DAY 162

오늘 배운 일

✔️ Django 웹 개발

1. 폼을 더 간단하게, 모델 폼(ModelForm)

이번에는 django 모델 폼(ModelForm) 에 대해 배워보겠다.

앞에서 우리가 작성한 PostForm 클래스를 보면...

Post 모양과 형태가 비슷하다.

forms.py

models.py

코드를 봐도 중복되는 부분들이 좀 보인다.

이렇게 웹 서비스에서의 폼은 데이터베이스 기반 즉 모델을 기반으로 만드는 경우가 많다.

유저로부터 데이터를 입력받아서 데이터베이스에 저장하는 등의 로직이 많기 때문이다.

ModelForm 은 django 의 강력한 폼 기능 중 하나로 우리가 작성한 모델을 기반으로 해서 자동으로 폼을 생성해주는 기능이다.

일일이 폼을 작성하는 것을 django Form 클래스를 이용해서 간편하게 처리했는데 이제 이 Form 클래스를 작성하는 것마저 ModelForm 을 이용한다면 더 간편해진다.

대부분의 django 프로젝트들은 ModelForm 을 사용하게 될 것이다.

그럼 이제 ModelForm 을 사용해보겠다.

다음과 같이 코드를 수정해준다.

forms.py 에서 PostForm 클래스안에 있는 파라미터를 지워주고 forms.ModelForm 을 넣어준다.

forms.py

이렇게 하면 ModelForm 을 상속하겠다.

다음으로 우리가 예전에 적었던 title 과 content 는 지워주도록 해준다.

그리고 이 ModelForm 이 어떤 모델을 사용해서 폼을 만들지 적어줘야 한다.

그러기 위해서는 우리가 사용할 모델을 가져와야 한다.

다음으로 아랫부분에 class Meta 를 적어준다.

그리고 model = Post 라고 적어주도록 한다.

참고로 안쪽에 Meta 클래스는 PostForm 이라는 클래스를 만들 때 적용할 여러 넣어주는 클래스다 이렇게 생각해주면 된다.

그리고 이 아랫줄에 이런 식으로 적어주면 Post 모델을 보고 django 가 폼을 생성하게 되는데 이 Post 모델 여러 필드가 있었다.

그 중에서 어떤 필드를 폼으로 만들 것인지를 명시해 주기 위해서 fields 라는 변수에 리스트 형태로 Post 모델에 필드를 넣어주면 된다.

한 번 밑에 있는 코드를 참고해서 작성해보자!

dt_created 와 dt_modified 는 폼으로 입력받는 것이 아니라 자동으로 생성되니까 이곳에 넣을 필요는 없다.

그런데 지금은 두 개만 적어주었지만 모든 필드를 폼으로 만들고 싶으데 모델의 필드가 많다면 지금처럼 하나씩 적기가 힘들다.

이 때 다음과 같이 작성을 해준다.

이런 식으로 적어주면 모든 필드가 적용된다.

다시 리스트 형태로 title, content 를 적어주면 폼 작성은 이걸로 끝나는 것이다.

각각의 폼 필드가 어떤 형식으로 작성되어야 하는지는 모델에서 정의한 필드를 참고하여 django 가 자동으로 폼을 생성해 주게 된다.

그럼 이제 views.py 로 가서...

views.py

하이라이트 된 부분도 ModelForm 에 맞게 변경해준다.

지워주고 밑에 있는 new_post.save() 또한 지워준다.

그리고 post_form 이라는 변수에 유저가 입력한 데이터를 바로 바인딩하도록 적어주겠다.

다음과 같이 작성해준다.

코드에 대해서 간단하게 설명하자면...

이런 식으로 폼과 데이터를 바인딩 해준다.

다음에 바인딩 된 내용을 save 를 해주면 데이터베이스에 저장할 수 있다.

모델 폼이 가지고 있는 save 함수는 바운드 폼으로부터 가져온 데이터로 모델 인스턴스를 만들고 인스턴스를 데이터베이스에 처리하는 과정을 진행해준다.

저장을 해주고 코드가 잘 동작하는지 확인해준다.

터미널로 가서 서버를 실행시켜준다.

http://127.0.0.1:8000/posts/new/

여기로 가면 글쓰기를 위한 폼이 있고 제목과 내용을 작성해주고 전송하면...

글쓰기가 잘 된것을 알 수 있다.

끝으로 :

  • 오늘은 django 의 모델 폼 (ModelForm) 에 대해 알아보았다.
  • 모델 폼은 우리가 작성한 폼을 기반으로 자동으로 폼을 생성해주어서 편리한 기능이여서 많이들 쓸 것 같다.
profile
하루를 의미있게 살자!

0개의 댓글