2012-10-04 3 views
4

많은 양의 레코드를 필터링해야하는 앱을 만들고 있습니다. 나는 QuerySets 및 관련 자료를 캐싱에 대해 읽고 있었고 좋은 자료를 발견했습니다.캐싱 쿼리 세트

qs = MyModel.objects.filter(Q(<initial_filter_to_narrow_down_size>)) 

이후이 qs를 나중에 사용할 수 있도록 캐시에 저장하려고합니다. 나는 데이터베이스를 치지 않고 다른 모든 필터를 적용하고 싶다. 예 : 일 때 무엇이 ​​발생합니까? 캐시가 수정됩니까? 나는 그것을 원하지 않는다. qs을 업데이트 할 때까지 계속 유지하고 싶습니다. 이 경우 어떻게해야합니까?

답변

0

. 필터()는 필터를 적용하기 전에 쿼리 세트를 복제합니다. 캐시는 영향을받지 않습니다.

자세히 알아 보려면 JohnnyCache ... 쿼리 세트 캐싱에 대한 유용한 앱을 확인하는 것이 좋습니다.

0

내가 알기로는 쿼리를 아래 그림과 같이 캐시에서 가져와야한다는 것입니다.

your_cached_qs = cache.get('qs') 

그런 다음 원하는 필터를 적용하십시오.

your_new_qs = your_cached_qs.filter(further_filter) 

이렇게해도 캐시에 설정된 쿼리에는 영향을 미치지 않습니다. 따라서 캐시를 다시 업데이트 할 때까지 캐시가 변경되지 않고 원하는 결과가 달성됩니다.