0Pricing
Django Academy · 강의

ManyToManyField와 중간 모델

추가 데이터와 함께 레코드를 양방향으로 연결합니다

ManyToManyField와 중간 모델은(는) CoddyKit의 무료 Django Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Django Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Django Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

Both Sides Have Many

Sometimes each side links to many of the other: a post has many tags, a tag marks many posts. That is a many-to-many relationship.

Declaring ManyToManyField

Add a ManyToManyField pointing at the other model. Django handles the link from both directions automatically.

class Post(models.Model):
    tags = models.ManyToManyField(Tag)

The Hidden Join Table

Behind the scenes Django builds a join table holding pairs of ids. No new column lands on either of your two models.

Adding Relations

Once a post is saved, attach tags with add. You can pass several objects at once in a single call.

post.tags.add(python_tag, web_tag)

Removing and Clearing

Drop a single link with remove, or wipe them all with clear. The related objects themselves stay safe.

post.tags.remove(web_tag)
post.tags.clear()

Reading the Set

Access linked rows through the field like a normal manager. Call all to loop over everything connected.

for tag in post.tags.all():
    print(tag.name)

When the Link Needs Data

What if a membership has its own facts, like a join date? A plain join table cannot hold extra columns, so you need more control.

The through Model

A through model is your own table for the relationship. It lets each link carry extra fields you define.

members = models.ManyToManyField(User, through="Membership")

Defining the through Class

The through model holds a ForeignKey to each side plus any extra fields. Those columns describe the connection itself.

class Membership(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    joined = models.DateField()

add Stops Working

With a custom through model, plain add is disabled. You create the link by making a through row directly instead.

Membership.objects.create(user=u, group=g, joined=today)

Querying Across M2M

Filter through a many-to-many link with the double underscore, just like a ForeignKey. The join table is handled for you.

Post.objects.filter(tags__name="python")

Quick Check

Your group membership needs to record when each user joined. What do you reach for?

Recap

Well done! A ManyToManyField links both sides freely, and a through model lets each connection carry its own data. 🏷️

자주 묻는 질문

“ManyToManyField와 중간 모델” 강의는 무료인가요?

네 — “ManyToManyField와 중간 모델” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Django Academy 강의 전체를 잠금 해제할 수 있습니다. Django Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“ManyToManyField와 중간 모델”에서 뭘 배우나요?

추가 데이터와 함께 레코드를 양방향으로 연결합니다 브라우저에서 직접 실행하는 실습 코드로 Django Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Django Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Django Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“ManyToManyField와 중간 모델” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Django Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Django Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. ForeignKey와 on_delete
  2. ManyToManyField와 중간 모델
  3. 프로필을 위한 OneToOneField
  4. related_name과 역방향 조회
← Django Academy(으)로 돌아가기