2009-10-02 2 views
1

나는 만들고있는 웹 사이트에서 일종의 활동을 보여주는 세 가지 모델을 가지고 있습니다. 노래, 투표 및 댓글. 그들은 모두 레코드가 생성 된 공통 열 when을 공유합니다.하나의 데이터 세트에서 3 가지 모델을 매시 및 정렬

세 가지 모델 모두를 기반으로 한 활동 목록을 보여 드리고 싶습니다. 간단히 말해서 나는 그들을 함께 섞어서 when으로 정렬하고 처음 10 개의 레코드를 긁어 낸다.

어떻게하면 나는이 질문입니다. 나는 각 모델에 대해 10 개의 코드를 가져 와서 사전에 넣고 날짜순으로 정렬 할 수 있다는 것을 알고있다. (필자는 파이썬에서 날짜순으로 정렬하는 방법을 알았지만) 이것은 상당히 비효율적 인 것으로 보인다.

답변

3

모델을 다시 작성하는 데 너무 늦을 수도 있지만, 한 가지 방법은 공통 기능을 상위 클래스로 가져 오는 것입니다. 그렇게하면 부모 모델에서 쿼리를 실행할 수 있습니다.

3

아마도 그렇게 할 수 있습니다. 비효율적이지는 않습니다. 30 개 항목을 정렬하는 것은 비교적 빠르고, 파이썬은 매우 훌륭한 내장 정렬 알고리즘을 가지고 있습니다.

items = list(Song.objects.order_by('when')[:10]) 
items.extend(list(Vote.objects.order_by('when')[:10])) 
items.extend(list(Comment.objects.order_by('when')[:10])) 

items.sort(key=lambda x: x.when) 

items = items[:10] 
+0

DB에서 django로 20 개 이상의 전체 레코드를 가져와야하지만, 순수 db 버전보다 훨씬 더 많은 레코드를 가져와야합니다.하지만 그래도 생각만큼 지저분하지는 않습니다. 나는 그것을 줄 것이고, 내가 어떻게 일어나는지 당신에게 알려줄 것이다. – Oli

관련 문제