2015-01-18 4 views
0

외래 키 필드 대/소문자를 구분하지 않고 쿼리를 정렬하려고합니다. 내 모델은 다음과 같습니다Django 외래 키 대소 문자를 구분하지 않는 개체 정렬

class Post(models.Model): 
title = models.CharField(max_length = 80) 
author = models.ForeignKey(User, default = User) 
trade_option = models.CharField(max_length= 10) 

class Book(models.Model): 
book_title = models.CharField(max_length = 60) 
post = models.ForeignKey(Post) 

내가 둔감 BOOK_TITLE 필드 경우에 따라 내 게시물의 개체를 정렬하고 싶습니다.

내가 클래스 포스트의 필드와 대소 문자를 구분하지를 정렬 할 경우 내가 아는 나는 다만 수

posts = Post.objects.filter(trade_option= 'buy').extra(select = 
    {'lower_name' : 'lower(title)'}).order_by('lower_name') 

그러나, 나는 BOOK_TITLE와 외래 키 책을 정렬과 같은 기술을하려고하면

나는이 잘못하고 있어요 어디

내가 좋아하는 것 알 수 없습니다 :

posts = Post.objects.filter(trade_option= 'buy').extra(select = 
    {'lower_name' : 'lower(book__book_title)'}).order_by('lower_name') 

나는 "book__boot_title 그런 열"이 오류가 발생합니다. 감사합니다

답변

0

book__book_title과 같은 관련 조회는 Django의 컨텍스트에서만 작동합니다. extra의 내용은 Django에서 처리하지 않으므로 이러한 조회는 작동하지 않습니다. 관련 테이블에서 명시 적으로 결과를 가져와야합니다.

당신이 정의하려고하는 순서는 아마도 다음과 같을 것입니다. Post 객체는 여러 개의 관련된 Book 객체를 가질 수 있습니다. book__book_title (수동으로 또는 orm을 통해)을 주문하면 쿼리의 정확한 세부 사항에 따라 불확정한 순서 또는 중복 행을 줄 수 있습니다. 게시물을 정렬해야하는 관련 book_title을 정의해야합니다.

1

나는 동일한 문제가있었습니다. 여기에해야 할 일이 있습니다 :

from django.db.models.functions import Lower 

posts = Post.objects.filter(trade_option= 'buy').order_by(Lower('title')) 
+0

좋은 답변이지만, 장고 1.8의 새로운 기능을 명심하십시오. – mingle