Django Many-to-one relationships
by EunHye Jung
Many-to-one relationships
테스트를 위한 Reporter, Article 모델 생성
-
many-to-one
관계를 정의하기 위해서는,ForeignKey
를 사용한다.from django.db import models class Reporter(models.Model): name = models.CharField(max_length = 30) age = models.IntegerField() email = models.EmailField() class Article(models.Model): headline = models.CharField(max_length = 100) pub_date = models.DateField() reporter = models.ForeignKey(Reporter, on_delete = models.CASCADE) class Meta: ordering = ('headline', )
-
한명의 리포터(Reporter)는 여러개의 기사(Article)를 작성할 수 있다.
기사에는 리포터에 대한 정보가 담겨있다.
Reporter와 Article 데이터 저장하기
-
2명의 리포터 데이터 저장
>>> r = Reporter(name = 'John Smith', age = 30, email = 'john@eaxmple.com') >>> r.save() >>> r2 = Reporter(name = 'Paul Jones', age = 26, email = 'paul@example.com') >>> r2.save()
-
기사 데이터 저장
>>> from datetime import >>> a = Artcle(id = None, headline = "This is a test", pub_date = date(2018, 7, 27, reporter = r)) # 외래키로 'John Smith' 리포터를 지정함 >>> a.save() >>> a.reporter.id 1 >>> a.reporter <Reporter : John Smith>
외래키 관계를 설정하기 전에, 객체(Reporter)를 반드시 저장(save)해야한다. 그렇지않으면 ValueError 발생.
-
리포터 객체를 이용해서도 기사를 만들 수 있다.
>>> new_article = r.article_set.create(headline = "John's second storey", pub_date = date(2018, 08, 11)) >>> new_article.reporter <Reporter: John Smith> >>> new_article.reporter.id 1
모든 데이터 가져오기
- 리포터 데이터 가져오기
>>> Reporter.objects.all()
>>> Article.objects.all()
필드값으로 데이터 추출하기
- 이름이 ‘John’인 리포터가 작성한 기사 가져오기
>>> Article.objects.filter(reporter__name = 'John')
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
- 이름이 ‘John’이고, 나이가 30세인 리포터가 작성한 기사 가져오기
>>> Article.objects.filter(reporter__name = 'John', reporter__age = 30)
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
- 리포터의 key값으로 데이터 가져오기
>>> Article.objects.filter(reporter__pk = 1)
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
>>> Article.objects.filter(reporter = 1)
<QuerySet [<Article: John's second story>, <Article: This is a test>]>
Subscribe via RSS