CharField 기초적인 개념

heeyoung_1023·2026년 4월 7일

헷갈리는 부분 정리

목록 보기
39/40

CharField는 Django 모델에서 가장 자주 쓰는 필드 중 하나로, 짧은 텍스트를 저장하는 칸입니다. 이름, 제목, 주소처럼 한 줄짜리 글자를 담을 때 씁니다.

아래 흐름도로 전체 개념을 한눈에 확인해 보세요.---

핵심 개념 정리

CharField = "짧은 글자를 저장하는 칸"

엑셀의 셀 하나라고 생각하면 쉬워요. 이름, 제목, 브랜드명처럼 한 줄짜리 텍스트를 담는 용도입니다.

name = models.CharField(max_length=100)

이 한 줄이 DB에 VARCHAR(100) 컬럼 하나를 만들어 줍니다.


옵션 설명

옵션역할예시
max_length최대 글자 수 (필수!)max_length=100
blank=True폼에서 비워도 됨선택 입력 항목에 사용
null=TrueDB에 NULL 저장 허용blank와 함께 쓸 때가 많음
default=''기본값 설정아무것도 안 입력하면 이 값

blanknull의 차이가 헷갈릴 수 있는데, blank"폼 입력 검증", null"DB 저장" 의 문제입니다.


CharField를 써야 할 때 vs 말아야 할 때

  • 써야 할 때: 이름, 제목, 주소, 전화번호처럼 짧은 한 줄 텍스트
  • TextField 써야 할 때: 게시글 본문, 리뷰 내용처럼 길고 제한 없는 텍스트
  • IntegerField 써야 할 때: 나이, 가격처럼 숫자

궁금한 옵션이 있으면 다이어그램의 각 박스를 클릭해 더 물어볼 수 있어요! 😊


CharField blank 옵션이 뭔가요?

blank=True 옵션이란?

blank폼(Form) 입력 시 이 칸을 비워도 되는지 를 결정하는 옵션입니다.


가장 쉬운 비유

회원가입 페이지를 떠올려보세요.

  • 이름 입력칸 → 필수 (비우면 "이름을 입력해주세요" 오류)
  • 닉네임 입력칸 → 선택 (비워도 통과)

이 "선택 칸"을 만들 때 blank=True를 씁니다.


코드 비교

class User(models.Model):
    username = models.CharField(max_length=50)
    # blank 없음 = 기본값이 blank=False
    # → 폼에서 반드시 입력해야 함

    nickname = models.CharField(max_length=50, blank=True)
    # → 폼에서 비워도 통과됨

blank vs null 차이 (자주 헷갈리는 부분!)

옵션언제 작동하나?역할
blank=True폼 입력할 때"이 칸 안 채워도 됩니다"
null=TrueDB에 저장할 때"DB에 NULL 값 저장 허용"

CharField는 보통 null=True 없이 blank=True만 써도 충분합니다. 비어있을 때 DB에 NULL 대신 빈 문자열 ''을 저장하기 때문입니다.

# CharField 권장 패턴
nickname = models.CharField(max_length=50, blank=True, default='')
#                                           ↑ 폼 비워도 됨  ↑ 빈 문자열로 저장

한 줄 요약

blank=True = "이 항목은 선택 입력입니다" 라고 Django에게 알려주는 것

추가로 궁금한 옵션 있으면 알려주세요! 😊


CharField null 옵션이 뭔가요?

null=True 옵션이란?

nullDB(데이터베이스)에 저장할 때 "값 없음"을 NULL로 저장할지 를 결정하는 옵션입니다.


가장 쉬운 비유

엑셀 셀을 떠올려보세요.

  • 셀에 빈 문자열 '' 저장 → 셀이 존재하는데 내용이 없는 것
  • 셀에 NULL 저장 → 셀 자체에 "아무 값도 없음" 표시

이 두 가지는 DB 입장에서 다른 값입니다.


코드 비교

class User(models.Model):

    nickname = models.CharField(max_length=50, blank=True)
    # null=True 없음 → 비어있으면 DB에 '' (빈 문자열) 저장

    bio = models.CharField(max_length=200, blank=True, null=True)
    # null=True 있음 → 비어있으면 DB에 NULL 저장

DB에 실제로 어떻게 저장되나?

상황null=True 없을 때null=True 있을 때
닉네임 입력 안 함'' (빈 문자열)NULL
닉네임 입력함'heeyoung''heeyoung'

blank vs null 한눈에 비교

blank=True   →   폼(화면) 단계에서 작동   →   "입력 안 해도 됨"
null=True    →   DB 저장 단계에서 작동    →   "NULL로 저장 허용"

사용자가 폼에 아무것도 안 입력
        ↓
   blank=True?  ─── No ──→  "필수 항목입니다" 오류 발생
        │
       Yes
        ↓
   DB에 저장할 때
   null=True?  ─── No ──→  '' (빈 문자열) 로 저장
        │
       Yes
        ↓
    NULL 로 저장

CharField에서 권장하는 패턴

CharFieldnull=True되도록 쓰지 않는 것이 Django 권장 방식입니다. "값 없음"을 표현하는 방법이 NULL'' 두 가지가 생겨서 나중에 조회할 때 혼란스럽기 때문입니다.

# 권장
nickname = models.CharField(max_length=50, blank=True, default='')

# 비권장 (CharField에서)
nickname = models.CharField(max_length=50, blank=True, null=True)

null=TrueCharField보다 IntegerField, DateField 같은 숫자/날짜 필드에서 더 자연스럽게 씁니다. 숫자 필드는 "값 없음"을 0으로 표현하면 의미가 달라지기 때문입니다.


한 줄 요약

null=True = "이 칸이 비어있을 때 DB에 NULL로 저장해도 됩니다" 라고 Django에게 알려주는 것

궁금한 게 있으면 더 물어보세요! 😊


CharField max_length 옵션이 뭔가요?

max_length 옵션이란?

max_length이 칸에 입력할 수 있는 최대 글자 수를 정하는 옵션입니다. CharField에서 반드시 써야 하는 필수 옵션입니다.


가장 쉬운 비유

종이 서류의 입력칸을 떠올려보세요.

  • 이름 칸 → [ _ _ _ _ _ _ _ _ _ _ ] (10칸)
  • 주소 칸 → [ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ] (20칸)

max_length는 이 칸의 크기를 정하는 것입니다.


코드

class User(models.Model):
    username = models.CharField(max_length=50)
    # 최대 50글자까지만 저장 가능

    email = models.CharField(max_length=200)
    # 최대 200글자까지 저장 가능

max_length가 하는 일 2가지

max_length=50 설정 시

① DB 테이블 생성할 때
   → VARCHAR(50) 컬럼으로 만들어짐
   → DB 자체에서 50자 초과 저장 차단

② 폼(화면) 입력할 때
   → 51자 이상 입력하면 "이 필드의 최대 길이는 50입니다" 오류 발생
   → Django가 자동으로 검증해줌

적절한 max_length 값 가이드

저장할 내용권장 값이유
이름, 닉네임50대부분 50자 이내
이메일 주소200이메일 최대 길이 규격
제목, 상품명100~200여유 있게 설정
주소255긴 주소 대비
비밀번호(해시)128암호화된 문자열 길이

긴 글(게시글 본문, 리뷰 내용 등)은 max_length가 없는 TextField를 쓰는 게 맞습니다.


max_length를 빠뜨리면?

# 이렇게 쓰면 오류 발생!
name = models.CharField()

# Django가 이렇게 알려줌:
# TypeError: CharField requires a max_length attribute.

CharFieldmax_length 없이는 아예 실행이 안 됩니다.


한 줄 요약

max_length = "이 칸에는 최대 몇 글자까지 쓸 수 있나요?" 를 Django와 DB에게 알려주는 필수 설정

궁금한 게 있으면 더 물어보세요! 😊


CharField default 옵션이 뭔가요?

default 옵션이란?

default아무것도 입력하지 않았을 때 자동으로 채워지는 기본값을 설정하는 옵션입니다.


가장 쉬운 비유

회원가입 폼을 떠올려보세요.

  • 국가 선택칸 → 아무것도 안 고르면 자동으로 "대한민국" 이 선택됨
  • 등급 칸 → 처음 가입하면 자동으로 "일반회원" 으로 설정됨

이 "자동으로 채워지는 값"이 바로 default입니다.


코드

class User(models.Model):

    username = models.CharField(max_length=50)
    # default 없음 → 반드시 값을 넣어야 함

    country = models.CharField(max_length=50, default='대한민국')
    # 아무것도 안 입력하면 자동으로 '대한민국' 저장

    grade = models.CharField(max_length=20, default='일반회원')
    # 아무것도 안 입력하면 자동으로 '일반회원' 저장

DB에 실제로 어떻게 저장되나?

상황default 없을 때default='일반회원' 있을 때
값을 입력함'관리자' 저장'관리자' 저장
값을 안 입력함오류 발생'일반회원' 자동 저장

default 값의 종류

# 1. 빈 문자열 (가장 많이 씀)
nickname = models.CharField(max_length=50, blank=True, default='')

# 2. 특정 문자열
grade = models.CharField(max_length=20, default='일반회원')

# 3. 함수로 동적 생성 (호출 가능한 객체)
import uuid
code = models.CharField(max_length=36, default=uuid.uuid4)
# → 저장할 때마다 자동으로 고유한 코드 생성

blank=True와 함께 쓰는 이유

blank=True  →  폼에서 비워도 됨
default=''  →  비웠을 때 DB에 '' 로 저장

이 두 개를 함께 써야 완전한 "선택 입력 칸"이 완성됨
# CharField 선택 입력 칸의 권장 패턴
nickname = models.CharField(max_length=50, blank=True, default='')
#                                          ↑ 폼에서 비워도 됨
#                                                        ↑ 비면 '' 로 저장

한 줄 요약

default = "아무것도 입력 안 하면 이 값으로 자동 저장해줘" 라고 Django에게 알려주는 것

궁금한 게 있으면 더 물어보세요! 😊

profile
개발언어를 배우는 과정 기록

0개의 댓글