Это мой исходный запрос: 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)
Я делаю это простым. Исходный запрос длиннее. Я отредактирую его. Подождите некоторое время – user2492364
Под «комбайн», вы имеете в виду «союз»? То есть вы хотите, чтобы все элементы, входящие в один или оба входных запроса. –
Почему бы не ввести переменную для общей фильтрации? 'q_common = Q (releaseday__gte = past_month.date(), releaseday__lte = today.date(), movie__movietime__gte = today)' –