2011-03-24 6 views
0

매우 간단한 페이지 매김 시스템을 최적화하려고합니다. 나는django에서 그룹화 된 데이터 쿼리

myModel.objects.get(slug='my slug bla bla bla') 

내 모델에서 특정 콘텐츠를 가져 오는 그리고 난 같은 요청에 얻을 수 있도록하고 싶습니다, 다음/PREC 버튼을 표시하기 위해, 내 아이디에서 다음 및 이전 Pk의 Pk에 따라 또는 게시. 페이지 매김을 살펴 봤지만 내 prec = slug-pk-1, slug, next = slug-pk + 1을 해결하는 방법을 찾지 못했습니다. 순간에 나는 내 모델의 필드에 다음과 정확한 절대 URL을 가져 오기 위해 추가했지만 상당히 추악하고 많은 쓸모없는 SQL 쿼리를 만듭니다. 당신은 여기에 출력을 볼 수 있습니다 : http://diasporamas.com/le-barbier-de-paris/watch

내 가져 오기를 향상시키는 방법에 대한 아이디어?

감사합니다.

+0

좋아, 난 당신이 다음 및 이전 것들을 얻을 방법, 바보 같은 질문을 :) 물어볼 것입니다? (명심하십시오. 예를 들어 db rolbacks 등으로 인해 PK 번호 매기기에 구멍이있을 수 있습니다.) 페이지 매기기 (및 다음/이전) 버튼을 사용하려면 객체 세트가 필요하고 페이지 매김이 필요합니다 페이지 당 객체의 수는 1과 같습니다. 그러나! 그러면 페이지 자체가 아닌 페이지 사이를 천천히 보게 될 것입니다. – Jerzyk

답변

1

한 가지 쿼리에서 그렇게 할 수 있다고 생각하지 않습니다. 내가 생각할 수있는

가장 효율적인 방법은 다음과 같습니다 당신은 DB에서 개체를 얻을 경우

current = myModel.objects.get(slug='my slug bla bla bla') 
next = None 
next_pk = current.pk + 1 
previous = None 
prev_pk = current.pk - 1 
for mod in myModel.objects.filter(pk__in=(next_pk, prev_pk)): 
    if mod.pk == next_pk: 
     next = mod 
    else: 
     prev = mod 
+0

사실 그렇게하는 데 사용하고 있습니다. 하지만 난 거기에 여러 필터에 obects 얻을 수있는 고급 filterig 기능이있을 거라 생각 ... – Oleiade

+0

[Q objects] (http://docs.djangoproject.com/en/dev/topics/)로 복잡한 쿼리를 수행 할 수 있습니다. db/queries/# complex-lookups-with-q-objects)하지만 여기서는 도움이되지 않습니다. 다른 쿼리를하기 전에 현재 게시물의 ID를 얻으려면 여전히 첫 번째 쿼리를 수행해야합니다. – dgel