본문 바로가기
그냥 끄적끄적

장고 Models.py 데이터베이스 관련

by 강성주의 알고리즘 2025. 4. 30.

🔤 문자 필드

필드 설명 주요 옵션
CharField 고정 길이 문자열 (짧은 텍스트) max_length (필수)
TextField 길이 제한 없는 긴 문자열 제한 없음
title = models.CharField(max_length=100)
description = models.TextField()

 

🔢 숫자 필드

필드 설명 주요 옵션
IntegerField 정수 default, null, blank
PositiveIntegerField 양의 정수 (0 포함) Django 4.0 이후 PositiveIntegerField 사용 비추천,
대신 IntegerField(validators=[MinValueValidator(0)])
FloatField 부동 소수점 숫자 실수 값 저장
DecimalField 고정 소수점 숫자 (금액 등) max_digits, decimal_places 필수
price = models.DecimalField(max_digits=6, decimal_places=2)  # 예: 9999.99
views = models.IntegerField(default=0)

 

📅 날짜/시간 필드

필드 설명 주요 옵션
DateField 날짜 (YYYY-MM-DD) auto_now, auto_now_add
DateTimeField 날짜 + 시간 auto_now, auto_now_add
TimeField 시간만 (HH:MM:SS) 잘 사용되지는 않음
created_at = models.DateTimeField(auto_now_add=True)  # 생성 시 자동 기록
updated_at = models.DateTimeField(auto_now=True)      # 저장할 때마다 자동 갱신

 

불리언 필드

필드 설명
BooleanField True / False
NullBooleanField True / False / None (장고 3.1부터 deprecated)
is_published = models.BooleanField(default=True)

 

🔗 관계형 필드

필드 설명
ForeignKey 다대일 관계 (1:N)
OneToOneField 일대일 관계 (1:1)
ManyToManyField 다대다 관계 (N:M)
author = models.ForeignKey(User, on_delete=models.CASCADE)
profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag)

 

📌 주요 공통 옵션

  • null=True: 데이터베이스에 NULL 허용
  • blank=True: 폼에서 빈 값 허용
  • default=값: 기본값 설정
  • choices=[(값1, 표시명1), (값2, 표시명2)]: 제한된 선택지 제공
  • unique=True: 유일한 값
  • verbose_name='레이블명': 관리자 페이지에서 표시되는 필드명


💡 예시 모델 전체

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    views = models.IntegerField(default=0)
    is_published = models.BooleanField(default=True)

반응형