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 - как объединить два запроса для Serialize в порядке приоритета?

Но результат есть дубликат.
Я смотрю этот документ, он сказал, что proble является использование order_by() и distinct() вместе

Так что теперь мне нужно объединить queryset1 и queryset2 в последовательности. Показать результат 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

Почему бы не ввести переменную для общей фильтрации? 'q_common = Q (releaseday__gte = past_month.date(), releaseday__lte = today.date(), movie__movietime__gte = today)' –

ответ

0

Вы можете попробовать использовать этот

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

Это будет сочетать queryset1 и queryset2, а затем отсортировать их по значению realaseday.

+0

У меня есть ошибка: '' '' 'list' объект не имеет атрибута '_clone''''' – user2492364

+0

Откуда у вас эта ошибка? – arulmr

+0

Я думаю, что это возвращает список. Таким образом, вы не можете использовать его в качестве набора запросов больше. –