2

이것은 내 원래 검색어입니다. Movie.objects.filter(releaseday__gte=past_month.date(),releaseday__lte=today.date(),movie__movietime__gte=today).extra({'vrank': 'CASE WHEN hotrank=0 THEN 4 WHEN hotrank >=4 THEN 4 ELSE hotrank END'}).distinct().order_by('vrank','-releaseday')Django restframework - 두 개의 쿼리 세트를 결합하여 우선 순위에 따라 직렬화하는 방법?

결과가 중복되었습니다. 나는이 문서를 보면
, 그것은 proble 내가 순서 queryset1queryset2을 결합해야합니다 그래서 지금 함께

order_by()distinct()를 사용하고 있다고 말했다. 첫째 queryset1,
의 결과를 보여 다음 queryset2 날 감사 도와주세요

views.py :

class MovieList(MovieMixin, generics.ListAPIView): 
    serializer_class = MovieSerializer 

    def get(self, request, *args, **kwargs): 
     if request.GET.get("top"): 
      self.top(top) 
     return super(MovieList, self).get(request, *args, **kwargs) 

    def top(self,top):  
     queryset1 = Movie.objects.filter(releaseday__gte=past_month.date(),releaseday__lte=today.date(),movie__movietime__gte=today,hotrank__lte=3).exclude(hotrank=0).distinct().order_by('hotrank') 
     queryset2 = Movie.objects.filter(releaseday__gte=past_month.date(),releaseday__lte=today.date(),movie__movietime__gte=today).exclude(hotrank__lte=3,hotrank__gte=1).distinct().order_by('-releaseday') 

     self.queryset =(queryset1 | queryset2) 
+0

간단합니다. 원본 쿼리가 더 길다. 나는 그것을 편집 할 것이다. 잠시 기다려주십시오. – user2492364

+0

"결합하다"는 뜻은 "합집합"을 의미합니까? 즉, 입력 된 쿼리 세트 중 하나 또는 둘 다의 멤버 인 모든 항목이 필요합니다. –

+0

왜 공통 필터링을위한 변수를 소개하지 않습니까? '''' '목록'객체 '에는 속성이 없습니다 –

답변

0

당신은이

from itertools import chain 
.... 
self.queryset = sorted(chain(queryset1, queryset2), 
    key=lambda instance: instance.releaseday) 

이 queryset1을 결합한다 사용해 볼 수 있습니다 및 queryset2를 입력 한 다음 realaseday 값으로 정렬하십시오.

+0

나는 오류가 이 오류는 어디서 발생합니까? – user2492364

+0

을 _clone''''' :'q_common = Q (releaseday__gte = past_month.date(), releaseday__lte = today.date(), movie__movietime__gte = 오늘)' – arulmr

+0

이것이 목록을 반환한다고 생각합니다. 따라서 더 이상 쿼리 세트로 사용할 수 없습니다. –