인프런 커뮤니티 질문&답변

율리시스님의 프로필 이미지

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

ModelForm

폼 작성 패턴 질문

해결된 질문

21.12.19 17:41 작성

·

312

0

안녕하세요 강사님. 폼 작성 패턴에 관해서 질문드리고자 합니다.

한 API에서 여러개의 모델과 인터렉션해서 저장하고자 할 때, 하나의 폼으로 처리하는 경우가 있을수도 있을거같은데요.

폼 하나에서 여러 모델에 대한 필드를 검사하는 경우도 흔히 사용하는 패턴인지 궁금합니다. (ex. Form -> Model1, Model2, Model3 )

만약 이러한 패턴도 필요에 따라 사용하는것이 괜찮다고 한다면  폼의 유효성 검사 이후에 뷰에서 여러 모델 클래스들을 선언해서 저장한다면 코드가 매우 복잡해질 것 같다고 생각했습니다.

개인적으로 강사님게서 샘플코드로 작성해 주신 폼 내의 save()메서드 내에서 이를 진행하는게 좋아보인다고 생각했습니다.

하지만 프로덕션 레벨에 사용할만한 코드가 아니라고 강조를 해주셔서 무언가 도돌이표처럼 고민이 되네요.

질문을 정리해보자면

1. 애초에 일반 폼 하나에서 여러 모델의 필드를 유효성 검사하는것이 좋지 않은 패턴인지. (폼과 모델은 1:1 대응이 되어야 하는지?)

2. 일반 폼 하나에서 여러 모델의 필드를 유효성 검사 후 save()함수를 구현해서 여러 모델과의 인터렉션을 하는것도 괜찮은 방법인지?

답변 주시면 감사하겠습니다. 좋은 강의 감사합니다.

 

답변 1

1

이진석님의 프로필 이미지
이진석
지식공유자

2021. 12. 20. 12:42

안녕하세요.

Django Form 기능은 유저로부터 입력받고자 하는 필드들을 하나의 Form 클래스에 정의하여, html form을 생성할 수도 있고, 입력값에 대한 유효성 검사를 수행할 수 있습니다.

ModelForm은 단일 모델로부터 Django Form 필드들을 자동생성할 수 있는 기능이구요.

하나의 Form을 통해 다수 모델로의 저장이 필요한 경우라면 그렇게 구성하시면 됩니다. 다만 ModelForm은 단일 모델에 대해서만 자동으로 form fields 추가를 지원하기 때문에, 다른 모델에 대한 form fields는 직접 추가해주셔야 하는 것이죠.

단일 Form 클래스에 정의한 필드들에 대한 유효성 검사 및 저장은 그 Form 클래스 안에서 처리하는 것이 맞습니다. 그 Form 클래스의 관심사이기 때문이구요. 그 Form 클래스에 정의되지 않은 필드들에 대한 저장은 다른 루틴에서 처리하는 것이 맞습니다.