View

내일배움캠프 6주차 WIL

수현조 2025. 1. 10. 21:27

📚 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 관계의 특징

  1. 양방향 접근 가능:
    • Post에서 연결된 Tag 조회: post.tags.all()
    • Tag에서 연결된 Post 조회: tag.posts.all()
  2. 중간 테이블 관리 필요 없음:
    • Django가 자동으로 생성해서 관리해줌.
  3. 사용 예시:
    • 게시글 ↔ 태그
    • 영화 ↔ 배우
    • 학생 ↔ 수업

🎮 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로 간단히 구현 가능.
  • 양방향 조회와 자동화된 중간 테이블 관리가 장점!

 

Share Link
reply
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31