簡體   English   中英

Django restframework-如何將兩個查詢集組合以優先級順序化?

[英]Django restframework - how to combine two queryset to Serialize in order of priority?

這是我的原始查詢: 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')

但是結果重復了。
我看了看文件,說問題是一起使用order_by()distinct()

所以現在我需要按順序組合queryset1queryset2 首先顯示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 )

您可以嘗試使用此

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

這將組合queryset1和queryset2,然后按值realaseday對其進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM