저는 일반적인 쿼리 세트를 캐싱했습니다. 상황에 따라 다른 필드를 기반으로 필터링하고 싶습니다. 내가 처음에 그것을 캐싱의 이점을 잃는다면 평가 된 쿼리 세트를 필터링함으로써 궁금해하고 있습니다; Django는 처음부터 캐시 된 쿼리 세트와 이후에 적용 할 필터를 만드는 데 사용되는 쿼리 세트를 모아서 처음부터 다른 쿼리 세트를 작성합니까?Django는 평가 된 쿼리 세트를 어떻게 필터링합니까?
3
A
답변
5
예, 결과가 출력되지 않습니다.
소스에서 이것을 확인할 수 있습니다. filter()
은 _filter_or_exclude()
이며 _clone()
을 호출 한 다음 쿼리에 추가됩니다. _clone
, 당신은 볼 수 있습니다, _result_cache
속성을 설정하지 않습니다.
일반적으로 일반적인 결과를 유지하기 위해 수행 할 수있는 작업이 무엇인지 분명하지 않습니다. 작은 결과 집합이있는 복잡한 쿼리 인 경우 기본 키가 발견 된 결과 중 하나임을 확인하는 SQL을 발행하는 것으로 대체 될 수 있지만 항상 효율적이지는 않으며 일부 상황에서는 (데이터베이스가 캐싱 될 때와 추가 필터를 수행 할 때 사이의 쿼리 결과에 영향을주는 방식으로 변경되는 경우) 의미 론적으로 혼란 스러울 것입니다. 수동으로 ID를 저장하는이 동작을 강제하려면
, 당신이 작업을 수행 할 수 있습니다
pks = SomeObject.objects.filter(...).values_list('pk', flat=True)
some_of_them = SomeObject.objects.filter(pk_in=pks).filter(...)
others = SomeObject.objects.filter(pk_in=pks).filter(...)
당신은 물론 단지 이렇게도 할 수있는 필터링 파이썬에서, 예를 들어,
common = SomeObject.objects.filter(...)
some_of_them = [m for m in common if m.attribute == 'foo']
others = [m for m in common if m.other_attribute == 'bar']
(당신은 또한 더 명시 적으로 당신이 선호하는 경우
filter(lambda m: m.attribute == 'foo', common)
를 사용하거나
list
에
common
의 정의를 포장 할 수있다.)에 의해
쿼리를 재발행하는 것은 크기에 많이 의존이 또는 한 여부 필터의 복잡성, 그리고 어떤 인덱스가 존재하는지에 대한 정보를 제공합니다.
관련 문제
- 1. 쿼리 세트를 평가 한 다음 필터를 호출하십시오.
- 2. 아음속로드 된 컬렉션을 어떻게 필터링합니까?
- 3. ItemGroup을 어떻게 필터링합니까?
- 4. MSN은 스팸을 어떻게 필터링합니까?
- 5. 데이터베이스에서이 데이터를 어떻게 필터링합니까?
- 6. llblgen : 어떻게 필터링합니까?
- 7. 쿼리 동등성 평가
- 8. Rails의 로그에서 캐싱 된 DB 쿼리를 필터링합니까?
- 9. django는 쿼리 목록에서 목록을 만듭니다.
- 10. XML의 중요한 노드를 어떻게 필터링합니까?
- 11. 어떻게 장고 태그로 태그를 필터링합니까?
- 12. 사용자 입력 CSS를 어떻게 필터링합니까?
- 13. SCons Glob 결과를 어떻게 필터링합니까?
- 14. 새로운 쿼리 세트를 만들지 않고 장고 쿼리 세트를 쿼리합니까?
- 15. django는
- 16. 어떻게 평가
- 17. django는 virtualenv와 어떻게 작동합니까?
- 18. Django는 Firefox에서 쿼리 문자열로 구문 분석 된 URL을 리디렉션합니다.
- 19. 코어 데이터가 포함 된 NSMutable Array를 어떻게 필터링합니까?
- 20. 데이터베이스에 대해 이상하게 포맷 된 데이터를 MSWord에서 어떻게 필터링합니까?
- 21. Django는 질의 결과를 쿼리 집합에 추가합니다.
- 22. 어떻게 톱 1에 의해 sql 테이블을 필터링합니까?
- 23. NSArray 또는 NSMutableArray를 어떻게 실시간 필터링합니까?
- 24. django에서 빈 쿼리 세트를 확인하십시오.
- 25. MySQL 쿼리 검사 사용자 평가
- 26. 필터링 된 브리지 테이블 필드를 사용하여 쿼리 세트를 주문하려면 어떻게합니까?
- 27. Django는 쿼리 세트에 외래 키 항목을 주문합니다.
- 28. 위젯에서 ModelMultipleChoiceField의 쿼리 세트를 정의하십시오.
- 29. RoutingErrors와 긴 스택 추적을 어떻게 필터링합니까?
- 30. Log4j : 특정 클래스의 메시지를 어떻게 필터링합니까?