2011-03-01 3 views
2

장고에 도서 개체 목록이 있습니다. 관리자 사용자가 지난 3 년 동안 첨부 된 Transations 수로 정렬 할 수있게하고 싶습니다. 이미 트랜잭션의 수에 대해이 작업을 수행 할 수아마도 장고 질문 : 시간 필터와 ForeignKey의 개수에 정렬 관리 필드?

은 아래 annotate 및 모델 관리자를 사용하여, 모든 시간에 걸쳐 객체 :

class Book(models.Model): 
    title = models.CharField(max_length=400) 
    def count(self): 
     return self.transactioncount/2 
    count.admin_order_field = 'count' 
class Transaction(models.Model): 
    book = models.ForeignKey(Book) 
    transaction_date = models.DateTimeField() 
class BookManager(models.Manager): 
    def get_query_set(self): 
     return super(BookManager,self).get_query_set().annotate(transactioncount=(Count('transaction'))) 

을하지만 트랜잭션이 작업을 수행하는 방법을 모른다 지난 3 년 동안 - 필자는 주석 기능을 다시 작성해야하거나 더 복잡한 것을 사용해야 할 것 같습니까?

장고에서는이 기능을 사용할 수 있습니까?

감사합니다.

+0

범프 - 누구 알아? 불가능하다면 불가능합니다. :) – AP257

답변

1

당신은 extra를 사용하여 annotate 그렇게해야 시간 범위 내에서 거래를 계산 같은 복잡한 표현 할 수하는 내부 필터링 할 수 없습니다 : http://docs.djangoproject.com/en/1.2/ref/models/querysets/#extra

Book.objects.extra(
    select={ 
     'recent_transaction_count': "SELECT COUNT(*) FROM app_transaction WHERE app_transaction.book_id = app_book.id AND app_transaction.transaction_date > '2008-03-08'" 
    } 
) 

당신은 응용 프로그램 이름으로 app를 교체해야 할 것이다 이러한 모델 포함되어 있습니다. select_params을 사용하여 날짜를 매개 변수화 할 수 있습니다.