[Django] 모델

LeeYun·4일 전

1. Django 모델 소개

Django 모델은 데이터에 대한 단일하고 정확한 정보의 원천입니다. 이 모델은 저장하는 데이터의 필수 필드와 동작을 포함합니다. Django는 DRY(Don't Repeat Yourself) 원칙을 따르므로 데이터 모델을 한 곳에서 정의하고 자동으로 유도하는 것을 권장합니다.

Django에서 모델은 django.db.models.Model 클래스를 상속하는 Python 클래스입니다. 모델의 각 속성은 데이터베이스 필드를 나타냅니다. Django는 이 모델을 위해 데이터베이스 스키마(SQL create table 문)와 관리자 사이트의 인터페이스를 자동으로 생성합니다.

2. 모델과 필드 정의

Django에서 모델을 정의하는 것은 Python 클래스를 정의하는 것과 같이 간단합니다. 예를 들어, 블로그 애플리케이션을 구축한다고 가정해보겠습니다. 블로그 글을 위한 모델을 다음과 같이 정의할 수 있습니다:

from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published_date = models.DateTimeField(auto_now_add=True)

이 예제에서 BlogPost는 우리의 모델이며, title, content, published_date 세 가지 필드를 갖습니다. 각 필드는 Field 서브클래스의 인스턴스(CharField, TextField, DateTimeField 등)이며, 각 필드는 저장할 수 있는 데이터 유형을 결정합니다.


Django 모델 데이터 유형

  • CharField : 이 필드는 문자열을 나타내며 텍스트 데이터를 저장하는 데 사용됩니다. max_length 매개변수를 사용하여 문자열의 최대 길이를 지정할 수 있습니다.
  • IntegerField : 이 필드는 정수 값을 나타냅니다. 양수와 음수 정수 모두를 특정 범위 내에서 저장할 수 있습니다.
  • FloatField : 이 필드는 소수점 숫자를 나타냅니다. 지정된 소수 자릿수를 가진 부동 소수점 숫자를 저장할 수 있습니다.
  • BooleanField : 이 필드는 불리언 값(True 또는 False)을 나타냅니다. 이진 값이나 플래그를 저장하는 데 사용할 수 있습니다.
  • DateField : 이 필드는 날짜 값을 나타냅니다. "YYYY-MM-DD" 형식으로 날짜를 저장할 수 있습니다.
  • DateTimeField : 이 필드는 날짜와 시간 값을 나타냅니다. "YYYY-MM-DD HH:MM:SS" 형식으로 날짜와 시간 정보를 모두 저장할 수 있습니다.
  • EmailField : 이 필드는 이메일 주소를 나타냅니다. 입력된 값이 유효한 이메일 주소인지를 검증합니다.
  • FileField : 이 필드는 파일 업로드를 나타냅니다. 파일 경로나 실제 파일 객체를 저장할 수 있습니다.
  • ForeignKey : 이 필드는 두 모델 간의 다대일 관계를 정의하는 데 사용됩니다. 다른 모델을 외래 키로 참조하는 데 사용됩니다. 이 필드는 관련 모델을 지정해야 하며, 일대다와 같은 관계를 설정하는 데 사용할 수 있습니다.
  • ManyToManyField : 이 필드는 두 모델 간의 다대다 관계를 정의하는 데 사용됩니다. 하나의 모델 인스턴스를 다른 모델 인스턴스와 여러 개 관련시킬 수 있습니다. 이 필드는 관련 모델을 지정해야 하며, 관계를 관리하기 위해 중간 테이블을 생성합니다.

이것은 Django에서 사용 가능한 모델 필드의 일부 예시에 불과합니다. 각 필드 유형은 데이터베이스에서 데이터를 저장하고 검색하기 위한 특정 기능과 유효성 검사를 제공합니다. 저장할 데이터의 유형과 적용하려는 제약 조건에 따라 적절한 필드 유형을 선택할 수 있습니다.


모델 간의 관계 생성

Django는 모델 간의 관계를 정의하는 방법을 제공합니다. 특히 일대일, 일대다 및 다대다 관계를 정의할 수 있습니다.

  • 일대일 관계(OneToOneField) : 애플리케이션에서 각 사용자마다 고유한 사용자 프로필을 가지고 있다면 다음과 같이 사용자를 해당 프로필에 연결할 수 있습니다
from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField()
  • 일대다 관계(ForeignKey) : ForeignKey를 사용하면 한 모델의 여러 인스턴스를 다른 모델의 한 인스턴스에 연결할 수 있습니다. 예를 들어, 블로그 글에는 여러 개의 댓글이 있을 수 있지만, 각 댓글은 하나의 블로그 글과 연결될 수 있습니다
class Comment(models.Model):
    post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    text = models.TextField()
  • 다대다 관계(ManyToManyField) : 블로그 글은 여러 개의 태그를 가질 수 있고, 각 태그는 여러 개의 블로그 글과 연결될 수 있습니다
class Tag(models.Model):
    name = models.CharField(max_length=30)
    posts = models.ManyToManyField(BlogPost)
profile
AI/Network

0개의 댓글