2013-03-21 3 views
2

매번 데이터베이스를 사용하지 않고도 Model 객체 컬렉션에서 쉽게 필터링 할 수있는 방법을 찾고 있습니다. 정의에 따르면 QuerySets은 게으르며 항상 DB를 공격합니다. 그래서 나는이 일을 할 수있는 것이 있는지 궁금합니다. 그렇지 않다면 아마도 좋은 라이브러리를 만들어야 할 것입니다. 예를 들어Django에서 객체 집합의 쿼리 세트와 유사한 필터링

:

all_records = object_set(Record.objects.filter(company=user.company)) 

object_set 정적 데이터로서 검색어 세트에서의 모든 객체를 수집하는 것 인 가상의 함수 인. 결과는 QuerySet 필터와 비슷한 필터를 실행할 수있는 "개체 관리자"인스턴스가됩니다. 특히 다차원 데이터 목록의 데이터를 기반으로 개체 만들기, 업데이트 및 삭제를 저장하는 데 특히 유용합니다.

for row in data: 
    for col in row: 
    # this would not hit the DB. Only filter within the "object_set" in memory. 
    all_records.filter(date=col.date, type=col.type, creator=col.user) 

나는 이것을 잘못된 방법으로 해결하려고 할 수도 있다는 것을 알고 있지만, 이것이 관계없이 장고에서 갖는 훌륭한 도구라고 생각합니다. 누구든지이 문제를 해결할 수있는 장고 내의 기존 라이브러리 또는 기능을 알고 있습니까? 미리 감사드립니다!

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

답변

1

은 내가 검색어 세트의 select_related 방법은 당신이 원하는 것을 생각 django-model-utils/.../managers.py 그가 구현하는 방법 그것은 당신을 표시해야합니다

쿼리 세트

def get_query_set(self): 
    qs = super(QueryManager, self).get_query_set().filter(self._q) 
    if self._order_by is not None: 
     return qs.order_by(*self._order_by) 
    return qs 
+0

거의,하지만 결과는 여전히 모든 필터에 DB를 칠 것 또는 전화를 받아보기 QS 될 것이다. – thomallen

0

, 다음 프로젝트에 managers.py를 확인하시기 바랍니다 :