Django 핵심기능 Form

김용녀·2022년 7월 29일
0

장고에서 폼의 동작 과정은
Form 클래스에서 폼을 정의하고, View에서 사용하여
Template엔진에 의해 html로 렌더링된다.

폼 종류

  • 일반 폼- Form클래스를 상속받아 정의
  • 모델 폼- ModelForm클래스를 상속받아 정의.폼 필드 구성을 DB 모델 정의 기반으로 폼을 정의하는경우에 사용한다.
  • 폼셋 - 일반 폼을 여러개 묶어서 한번에 보여준다. formset_factory()함수 이용
  • 모델 폼셋- DB에 기초해서 여러 폼 묶은것. modelformset_factory()이용
  • 인라인 폼셋- 두 모델간 관계가 1:N일때 N모델에 기초해서 모델을 여러개 묶은 모델폼이다. Inlineformset_factory()이용.

폼 객체를 만들때 폼생성 클래스에 인자 값이 들어가면 DB와 연결되는 바운드폼,
인자가 없다면 DB와 연결되지않은 빈값 .언바운드폼이 된다.

그리고 폼을 출력하는 방식이 다양하다

이제 처음에 말한 폼 종류별 정의 방식에 대해 알아보자.

일반 폼 정의

  • Form 클래스를 상속받는다.일반 폼에서 각 필드들은 모델 필드와 매핑을 할수 있어야 한다.
    Photo모델을 일반 폼으로 작성할경우, album은 기존에 ForeignKey였는데, 폼에선 ModelChoiceField를 사용한다.(선택항목은 queryset)

모델 폼 정의

  • ModelForm을 상속받는다.모델에서 정의한 필드를 참조해서 작성하면된다.

작업이 매우 간단하다.
이 방법 뿐 아니라 modelform_factory() 메소드방식을 이용할수 있다.
CreateView와 UpdateView는 폼 작성기능을 갖고있어야 해서, ModelForm기능이 내장되어있다. 따라서 간단히 작성시 fields='__all__'을 이용할수있다.

폼셋 정의

보통 formset_factory() 메소드를 이용한다.
하나의 폼을 임포트해서 formset_factory()와 사용해줬다.

모델 폼셋 정의

modelformset_factory()를 이용한다. 이때 내부적으로 modelform_factory()와 formset_factory()를 호출한다.

인라인 폼셋 정의

1:N관계의 테이블에서 폼을 작성할경우 인라인 폼셋을 이용해야한다.
이경우에 BaseInlineFormSet클래스 상속과 inlineformset_factory() 메소드 두가지 이용가능한데
모통 factory메소드를 이용한다.일반 album모델 안에 작성한다.

파일 업로드 폼

파일 업로드 폼을 정의할때 FileField와 ImageField 필드를 통해 업로드가 이뤄진다.
또, 주의해야할점은 form의 인코딩 요소를 multipart로 지정해야하고,
폼에 데이터를 바인딩할때 폼 데이터뿐 아니라 파일 데이터도 같이 바인딩해야한다.

profile
어서오세요

0개의 댓글