2014-10-17 4 views
1

다음과 같이 OrderManager이라는 사용자 지정 모델 관리자가있는 Order 모델이 있습니다.사용자 지정 모델 관리자 업데이트가 적용되지 않습니다.

class Order(models.Model): 
    # Model fields are declared here. 
    ... 
    objects = OrderManager() 
    all_objects = models.Manager() 

class OrderManager(models.Manager): 
    def get_queryset(self): 
     return super(OrderManager, self).get_queryset().filter(Q(x='y') | Q(x='y')) 

는, I는 검색어 세트에 다른 필터를 추가하여 OrderManager 클래스를 업데이트하고 새로운 구현 I는 업데이트 관리자를 사용 Order 모델로부터 데이터를 검색 할 때, 그러나

class OrderManager(models.Manager): 
    def get_queryset(self): 
     return super(OrderManager, self).get_queryset().filter(~Q(order_status='Cancelled'), Q(x='y') | Q(x='y')) 

밝혀졌다 변경 사항을 무시하고 여전히 order_status이 '취소됨'인 객체를 가져옵니다. 명시 적으로 마지막 추가 필터를 적용 한편

orders = Order.objects.all() # Retrieves cancelled orders as well. 

는 작동합니다

orders = Order.objects.filter(~Q(order_status='Cancelled') # Ignores the cancelled orders. 

그것이 마이그레이션 문제 나 무엇인가? 어딘가에 (어쩌면이 코드와 관련이없는) 바보 같은 실수가있는 것처럼 느껴진다.하지만 나는 눈이 멀었다. 어떤 제안이라도 대단히 감사합니다.

ps : 저는 Webfaction에서 Django 1.5.5를 사용하고 있습니다.

답변

1

django 1.6 메소드의 이름이 get_query_set 인 경우 get_queryset (추가 밑줄을 확인하지 않음)입니다. 캐치에 대한

class OrderManager(models.Manager): 
    def get_query_set(self): 
     return super(OrderManager, self).get_query_set().filter(~Q(order_status='Cancelled'), Q(x='y') | Q(x='y')) 
+0

감사 : 장고 1.5

그래서 이전은이 get_query_set 메소드를 오버라이드 (override) 할 필요가! 나는 내가 워크 스테이션으로 돌아가서 대답을 승인 된 것으로 표시하자마자 시도해 보겠습니다. – iuysal

관련 문제