작성
·
163
0
답변 1
0
안녕하세요.
ModelForm은 Form과는 달리 save 멤버함수를 지원해줍니다.
ModelForm 클래스 내부에 instance 멤버변수를 가지고 있습니다.
https://github.com/django/django/blob/3.0.14/django/forms/models.py#L289
유효성 검사에 통과한 값들(form.cleaned_data)을 관련 모델로의 save(create or update)를 지원해주는 것이죠.
save 메서드에서는 commit=True 키워드 인자를 지원하고, commit=True일때 instance.save()를 호출한 후에 instance를 반환하고, commit=False에서는 instance.save()를 호출하지 않고 instance를 반환합니다. 꼭 아래 코드를 확인해보세요.
https://github.com/django/django/blob/3.0.14/django/forms/models.py#L459
아래의 코드에서 .post, .author 지정은 form 인스턴스에 대한 설정이 아니라 instance 멤버변수에 대한 설정입니다.
comment = form.save(commit = False)
comment.post = post
comment.author = request.user
comment.save()
그러니 아래의 코드에서 .post, .author 속성 설정이 오류가 발생하지 않더라도, 이는 instance에 .post, .author 설정을 한 것이 아닙니다. // 파이썬은 동적으로 객체에 임의의 속성을 저장할 수 있는 유연함이 있습니다. 언어적 특징이죠.
form = CommentForm(request.POST,request.FILES)
form.post = post
form.author = request.user
form.save()
---
그리고 FBV/CBV 모두 활발히 사용이 되구요. FBV로만 서비스를 개발하셔도 됩니다.
다른 장고 라이브러리를 활용할 때에는 CBV로 된 뷰들이 있으니 이를 활용하실려면 CBV에 대한 이해가 있으셔야겠죠.
CBV는 생각하신 대로 상속을 통한 재사용성을 극대화 및, 원하는 메서드만 상속을 통해 변경할 수 있다는 유연함이 있습니다.
화이팅입니다. :-)