2013-02-10 2 views
3

장고에서는 "조건부"주석을 사용할 수 있습니까? 적용 등의 다음 모델조건부 주석에 의한 장고 필터

지금
class Author(models.Model): 
    name = models.CharField() 

class Article(models.Model): 
    title = models.CharField() 
    published = models.BooleanField() 

나는 저자의 일부 제한 (필터링)의 검색어를 선택하고 계산 총 책 모두를 주석을 달고 출판 책은 나중에 사용을 위해, 계산하고 싶습니다이 (가,의 말합시다 저자 queryset에 필터, 또는 그것을 주문).

Author.objects.filter(name__icontains = 'a').annotate(total_books = Count('books')).annotate(published_books = Count('books', <here published=true filter>))

같은 뭔가가 있다고는 얘기 할 수 있습니까?

+0

이 문제에 대한 해결책이 있습니까? 나는 비슷한 상황에 처해있다. 항목에 파일이 첨부되어 있으면 삭제 된 부울 필드로 파일을 삭제할 수 있습니다. File Object Manager가 Django에게 삭제 된 파일을 무시하지 않는다고 알려주는 경우에도 파일에 주석을 달아 삭제 된 파일을 주석 처리합니다. – Furbeenator

답변

1

Django의 ORM 호출은 SQL로 변환됩니다. SQL 쿼리로 수행 할 수 없다면 일반적으로 ORM으로 처리 할 수 ​​없다는 것을 의미합니다. 당신이 요청하는 것은 다른 쿼리를 요구하는 다른 where 절입니다 (내가 뭔가를 놓치지 않는 한 또는 오해). 당신은 단지 데이터를 뽑을 수,

  1. 실행 (다른 filter() 인수)이 다른 쿼리
  2. 이 두 번 실행하지 않으에 "비싼"쿼리 인 경우 :이이 옵션을 남긴다 DB에서 한 번 집계하여 일반 파이썬 코드로 집계합니다.
+0

내 모바일에서 질문을 편집하십시오. 어쨌든, 이드는 article 테이블의 왼쪽 외부 조인에 두 개의 계수가있는 sql을 생성하는 것을 좋아합니다. 조건 중 하나는 true로 설정되어 있습니다. – migajek

0

단순한 생각, 당신은 시도 할 수 있습니다 : BooleanField 이후

Author.objects.filter(name__icontains = 'a').\ 
    annotate(total_books = Count('books')).\ 
    annotate(published_books = Count('books__published')) 

가 0/1 정수로 기록,이 일을 할 수 있습니다. 아니면 안할 수도 있습니다 :) 코드 내에서 시도해보십시오.

+0

나는 내가 막 박테리아라고 생각했습니다. 죄송합니다... – aherok