Django ORM Join 시 주의할 점
Django ORM 을 사용하고 있는 join 과 관련해서 한참을 헤매었다. 다름이 아니라 아래글에 있는 대로 했는데, FieldError 가 자꾸났다.
결론은 filter 안에 넣는 이름을 잘못 넣어서였다. 여러 곳에서 class name 의 소문자로 표시를 했길레 당연히 BlogName 의 소문자인 blogname 를 filter 의 인자로 넣었는데, 그것이 아니라 blog_name 으로 했어야 했다.
# app1/models.py from django.db import models class BlogName(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() # app2/models.py from app1.models import BlogName class Entry(models.Model): blog_name = models.ForeignKey(BlogName, null=True) content = models.TextField()
틀린 문법
self.filter(blogname__id=24)[0]
올바른 문법
self.filter(blog_name__id=24)[0] self.select_related('blog_name').filter(blog_name__id=24)[0].blog_name.id
See Also
django ORM 에서 query 에 대한 좀 더 자세한 이야기는 아래 예제를 살펴보도록 하자.- Speeding up Django / PostgreSQL - Vincent Prouillet : ORM 의 속도 향상을 위한 문법
댓글 없음:
댓글 쓰기