-
[Python/Django] ManyToManyFeild 이해하기programming/django 2022. 9. 5. 20:35
https://docs.djangoproject.com/en/4.1/topics/db/examples/many_to_many/
Many-to-many relationships | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
1. 출판하는 곳과 기사의 모델을 만들어 줍니다.
2. 기사에 출판사와 manytomany 관계를 설정합니다
from django.db import models #출판하는 곳 class Publication(models.Model): title = models.CharField(max_length=30) class Meta: ordering = ['title'] def __str__(self): return self.title # 기사 class Article(models.Model): headline = models.CharField(max_length=100) publications = models.ManyToManyField(Publication) class Meta: ordering = ['headline'] def __str__(self): return self.headline
기사 A,B,C가 있다고 했을 때, 그 기사는 여러 곳에 출판할 수 있고 출판하는 곳에서 여러 기사를 낼 수 있다고 생각하면 된다.
예)
기사1 : '담배는 건강에 해롭다'
기사2 : '오이를 먹으면 건강해집니다.'
기사3 : '달릴 때 바른 자세'
출판하는 곳1: '한국 건강 잡지'
출판하는 곳2: '대한 스포츠 잡지'
출한하는 곳3: '식품 잡지'
-----한국 건강 잡지-----
기사들 : '담배는 건강에 해롭다', '오이를 먹으면 건강해집니다.', '달릴 때 바른 자세'
-----대한 스포츠 잡지-----
'달릴 때 바른 자세'
-----식품 잡지-----
'오이를 먹으면 건강해집니다.', '담배는 건강에 해롭다'
00000달릴 때 바른 자세00000
출판한 곳들 : 한국 건강 잡지, 대한 스포츠 잡지
00000담배는 건강에 해롭다00000
한국 건강 잡지, 식품 잡지
00000오리를 먹으면 건강해집니다00000
한국 건강 잡지, 식품 잡지
이 처럼 하나의 기사는 여러 곳에 출판 될 수 있으며, 출판하는 곳에서는 여러 기사를 출판 할 수 있습니다.
서로 연관된 값을 불러올 때에는 쉬운 예로는 인스턴스에서 속성 값을 불러올 때처럼 해주면 된다.
기사1 = Article(headline='오이를 먹으면 건강해집니다') 기사1.publications.add(title = '대한 건강 잡지') 기사1.save()
기사1.publications.all() >>><QuerySet [<Publication: 대한 건강 잡지>]>
반대로 지정 당한 모델의 인스턴스에서는 mtm관계의 객체를 불러올 때는 _set을 붙여준다.
출판하는곳1 = Publication.objects.get(title = '대한 건강 잡지') 출판하는곳1.article_set.all() >>> <QuerySet [<Article: 오이를 먹으면 건강해집니다>]>
'programming > django' 카테고리의 다른 글
[Python/Django] models.Foreingkey many to one 이해하기 (0) 2022.07.25