ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.