2017-05-23 1 views
0

어리석은 질문에 대해 사과드립니다.Django 필터 제한 객체

어디서이 솔루션이나 키워드 참조를 찾을 수 있을지 모르겠다.

# list of place id 
place_id_list = [...] 

난 그냥 여기

가있다 < = 5 가지 팁은 모든 장소에 대한 객체를 검색하려면 place_id_list 이상의 팁을 필터링하는 방법은 다음과 같습니다

는하자 내가 2 모델 장소 및 팁, 그리고이 말 모델 :

class Place: 
    ... 
class Tip: 
    # object_id is id of place 
    object_id = models.PositiveIntegerField(editable=False) 
    content_type = models.ForeignKey(ContentType) 

는 지금, 난 그냥 같은 루프에 대한 를 사용

tip_list = []  
for place_id in place_id_list: 
    tip_list += Tip.objects.filter(object_id=place_id, content_type...)[0:5] 

하지만이 쿼리는 느린 것 같습니다.

더 좋은 해결책이 있습니까?

감사합니다.

답변

1
tip_list = []  
for place_id in place_id_list: 
    tip_list += Tip.objects.filter(object_id=place_id, content_type...)[:5] 

당신이 장고가 새로운 객체가 필요하지 않은 게으른 로더와 나던 데이터베이스를 맞았다 알고 이것보다 더 좋은 방법은 없다

0

하는 쿼리 아래에보십시오 :

tip_list =Tip.objects.filter(object_id__in=place_id_list, content_type...)[:5] 

참조 링크 :

https://docs.djangoproject.com/en/dev/topics/db/queries/#the-pk-lookup-shortcut

+0

아니요, 단지 첫 번째 fi를 반환합니다. 모든 팁을 가지고, 나는 각 장소에 5 개의 팁을 가져 와서 그 안에 넣는다. ** tip_list ** –

+0

오, 그러면 place_id_list를 반복해야한다. 단지 해결책 일 뿐이다. –

+0

질문에서 보여준 해결책은 다음과 같다. 똑같다 :) –