🧠 Django ModelForm에서 위젯 설정 완전 이해하기 (widgets, form-control)

2025. 5. 9. 15:43·기술블로그-Django편

🧠 Django ModelForm에서 위젯 설정 완전 이해하기 (widgets, form-control)


🎯 목표

  • Django ModelForm에서 widgets 속성을 사용해 어떻게 Bootstrap 스타일을 입히는지 완전히 이해합니다.
  • CommentForm 안에서 쓰인 forms.TextInput(attrs={...})의 의미를 세부적으로 분해합니다.

✅ 전체 코드 구조 (기본)

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('content',)
        widgets = {
            'content': forms.TextInput(attrs={'class': 'form-control'})
        }
        labels = {
            'content': '댓글'
        }

🧩 각 줄 설명

1️⃣ class CommentForm(forms.ModelForm):

  • Django에 "이건 Comment 모델에 연결된 Form이야"라고 알려줌
  • 즉, 댓글 입력 폼을 자동 생성하기 위한 클래스

2️⃣ class Meta:

  • 폼이 어떤 모델을 기반으로 할지, 어떤 필드를 보여줄지, 스타일은 어떻게 할지를 지정하는 공간

3️⃣ model = Comment

  • 이 폼이 Comment 모델과 연결되어 있다는 의미

4️⃣ fields = ('content',)

  • Comment 모델 중 'content' 필드만 이 폼에서 입력받겠다는 뜻
  • author, blog는 폼에서 제외됨 (자동으로 처리되거나 숨김 처리)

5️⃣ widgets = { ... }

'content': forms.TextInput(attrs={'class': 'form-control'})
  • <input> 박스를 만들되, class="form-control"이라는 Bootstrap 스타일을 적용
  • attrs={...}는 HTML 속성을 직접 지정하는 방법 (여기선 class)
  • 결과적으로 예쁜 input 창으로 자동 변환됨

6️⃣ labels = { 'content': '댓글' }

  • 템플릿에서 보일 라벨 이름을 '댓글'로 지정 (기본값: Content)

🧪 최종 HTML 결과 예시

이렇게 설정하면 최종적으로 렌더링되는 HTML은:

<label for="id_content">댓글</label>
<input type="text" name="content" class="form-control" id="id_content">

✅ 즉, Bootstrap 스타일이 적용된 깔끔한 입력창이 자동으로 나옵니다!


❓ 왜 이렇게 설정해야 하나요?

방법 결과 단점

아무 설정 안 함 <input>만 나옴 투박하고 스타일 없음
form-control 적용 예쁜 Bootstrap UI 적용 class를 일일이 지정해야 함

✅ 그래서 widgets로 class를 자동 지정하는 것이 실무에서 가장 깔끔한 방식입니다.


✅ 요약 정리

항목 설명

'content' 적용할 필드 이름
forms.TextInput(...) 텍스트 입력창 위젯 지정
attrs={'class': 'form-control'} HTML 속성 추가 (Bootstrap 클래스)
labels={'content': '댓글'} 폼 라벨 이름 지정

💬 한마디로!

"이 한 줄로 Bootstrap 스타일이 깔끔하게 입혀진 댓글 입력창이 완성되는 것!"

필요하면 Textarea, Select, CheckboxInput 같은 다른 위젯들도 정리해드릴게요. 😎

'기술블로그-Django편' 카테고리의 다른 글

📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복 version 2  (0) 2025.05.09
📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복  (0) 2025.05.09
🛠 Django Admin에서 댓글(Comment)을 블로그(Blog)와 함께 관리하는 방법  (0) 2025.05.09
🧩 Python의 *args, **kwargs 완전 정복 + Django 실전 활용 예시  (0) 2025.05.09
🛠 Django 기본 Form(as_p)을 간접 커스터마이징하는 방법  (0) 2025.05.09
'기술블로그-Django편' 카테고리의 다른 글
  • 📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복 version 2
  • 📌 Django 템플릿, Form, View, URL, DB 흐름 완전 정복
  • 🛠 Django Admin에서 댓글(Comment)을 블로그(Blog)와 함께 관리하는 방법
  • 🧩 Python의 *args, **kwargs 완전 정복 + Django 실전 활용 예시
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (798)
      • Python (32)
      • 프로젝트 (113)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    global politics
    basalcellcarcinoma
    life reflection
    lawsuitculture
    americaparty
    smartphonedurability
    gpterror
    RM
    hotcoffeecase
    travel ban
    trumpmuskclash
    btsdischarge
    newpoliticalparty
    youngprofessionals
    btsjungkook
    btscomeback
    뷔
    bts
    classaction
    self-growth
    chinanightlife
    urbantrends
    remittance
    livebroadcast
    chatgpterror
    homebartrend
    college reunions
    titaniumcase
    btsreunion
    americanlaw
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🧠 Django ModelForm에서 위젯 설정 완전 이해하기 (widgets, form-control)
상단으로

티스토리툴바