2011-08-25 5 views
0

일부 코드를보고 있는데 이것이 좋은 연습인지 궁금합니다.Django 사용자 지정 관리자

 class ToDoManager(models.Manager): 
      def scheduled(self): 
      """ 
      Returns QuerySet of all things to be done. 
      """ 
      return self.filter(...) 


     class ImpStuff(models.Model): 
      ....model definition 

      objects=TodoManager  

나는 custom manager가 get_query_set (의역 말하기) 메소드보다 우선하는 것을 보았다. 대신이 것을 처리하는 좋은 방법입니까?

답변

1

나는 이것을 전에했다. 괜찮 았어. 그래서 당신이 내 코드를보고 있지 않다면, 세상에 두 사람이 유용하다는 것을 알게 될 것입니다.

get_query_set을 무시하는 대안 아니다 - 그것은 (필터링) 인스턴스를 얻기의 추가 방법을 제공합니다. 당신은 동시에 (이유 안에서) 둘 다 할 수 있습니다.

어떤 문제가 있습니까?

추신 :이 방법은 관리자가 most_recent()과 같은 방법으로 확장 된 Pro Django의 274 페이지 이후에도 사용됩니다.

+0

예 저는 Model.objects.scheduled()와 같은 메소드 체인을 기대합니다. 그게 맞습니까? – Ben

+0

예! 그것은 단지 물건을 넣는 적당한 장소와 같아 보인다. .. –

+0

굉장한 감사 앤드류! – Ben

3

복잡한 ORM 쿼리를 래핑하기 위해 모델 관리자를 사용하는 것이 매우 건조하고 권장됩니다. 당신은 그 방법에 매개 변수를 추가하고 자신에게 코드를 많이 절약 할 수 있습니다 :

class ToDoManager(models.Manager): 
     def scheduled(self, start_date, end_date): 
     """ 
     Returns tasks to be done within two dates. 
     """ 
     return self.filter(...) 

그런 다음 당신은 그냥 수행

todo_tasks = ImpStuff.objects.scheduled(datetime.now(), datetime.datetime.now() + datetime.timedelta(3)) 

관리자는 Github에서 볼 수 있습니다 오픈 소스 장고 애플 리케이션의 많은에 사용됩니다.

관련 문제