장고에서 Modeling을 할 때 한 테이블이 어떤 테이블과 ForeignKey로 연결되어 있을 때 manager를 통해서 참조 또는 역참조를 할 수 있다. 이번 포스팅은 장고에서의 참조, 역참조를 하는 방법에 대해서 알아보려고 한다.
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def Meta:
db_tables = blogs
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
def Meta:
db_tables = authors
class Entry(models.Model):
blog = models.ForeignKey(Blog)
headline = models.CharField(max_length=255)
authors = models.ManyToManyField(Author)
n_comments = models.IntegerField()
n_pingbacks = models.IntegerField()
rating = models.IntegerField()
def Meta:
db_tables = entries
entry = Entry.objects.get(id=1)
entry_blog = entry.blog # Blog 객체를 반환한다.
Manager 명명법: entry_set (entry는 역참조 하는 Model Instance(Entry)의 소문자 이름이다)
Manger는 QuerySet을 반환한다.
blog = Blog.objects.get(id=1)
blog.entry_set.all() # 모든 Entry 객체를 반환한다.
# blog.entry_set QuerySet을 반환하는 Manager이다.
blog.entry_set.filter(headline__contains='')
blog.entry_set.count()