View
📚 TIL (Today I Learned): Django의 N:M 관계 이해
🧩 1. N:M 관계란?
- 다대다 관계(N:M)는 여러 개가 여러 개와 연결될 수 있는 관계를 말해요.
- 예시:
- 한 게시글에 여러 태그를 붙일 수 있음.
- 하나의 태그도 여러 게시글에 붙을 수 있음.
- 한 친구가 여러 게임에 참여할 수 있고, 하나의 게임에도 여러 친구가 참여 가능!
🔧 2. Django에서 N:M 관계
- **ManyToManyField**를 사용하면 다대다 관계를 쉽게 설정할 수 있어요.
- Django가 자동으로 중간 테이블을 만들어서 관계를 관리해줘요.
📝 3. 코드 예시
게시글(Post)과 태그(Tag) 모델
from django.db import models
# 태그 모델
class Tag(models.Model):
name = models.CharField(max_length=50, unique=True) # 태그 이름
def __str__(self):
return self.name
# 게시글 모델
class Post(models.Model):
title = models.CharField(max_length=100) # 게시글 제목
content = models.TextField() # 게시글 내용
tags = models.ManyToManyField(Tag, related_name='posts') # N:M 관계
def __str__(self):
return self.title
🌟 4. N:M 관계의 특징
- 양방향 접근 가능:
- Post에서 연결된 Tag 조회: post.tags.all()
- Tag에서 연결된 Post 조회: tag.posts.all()
- 중간 테이블 관리 필요 없음:
- Django가 자동으로 생성해서 관리해줌.
- 사용 예시:
- 게시글 ↔ 태그
- 영화 ↔ 배우
- 학생 ↔ 수업
🎮 5. 실생활 예시
친구와 게임
- 한 친구가 여러 게임을 할 수 있고, 한 게임에 여러 친구가 참여할 수 있어요.
class Friend(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Game(models.Model):
title = models.CharField(max_length=100)
players = models.ManyToManyField(Friend, related_name='games')
def __str__(self):
return self.title
🔑 6. TIL Summary
- N:M 관계는 여러 개 ↔ 여러 개의 관계를 관리할 때 사용.
- Django의 ManyToManyField로 간단히 구현 가능.
- 양방향 조회와 자동화된 중간 테이블 관리가 장점!
'TIL' 카테고리의 다른 글
내일배움캠프 본캠프 34일차 (0) | 2025.01.14 |
---|---|
내일배움캠프 본캠프 33일차 - DJANGO (0) | 2025.01.13 |
내일배움캠프 본캠프 32일차 - DJANGO 프로젝트 워크플로우 (0) | 2025.01.10 |
내일배움캠프 본캠프 32일차 - Django의 모델 관계, 다대다 예시 (0) | 2025.01.09 |
내일배움캠프 본캠프 31일차 - 장고심화강의듣는쥬ㅜㅇ임 (0) | 2025.01.08 |
reply