Фильтры django | как сделать order_by для нескольких выбранных полей, которые обрабатываются разными методами

#filters.py

class PostFilter(django_filters.FilterSet):
CHOICES = (
    ('created_at','Old first'),
    ('-created_at','New first'),
)

ordering = django_filters.ChoiceFilter(choices=CHOICES,method='ordering_filter',widget=Select(attrs={'class':'filter','id':'ordering'}))
is_interesting = django_filters.BooleanFilter(method='filter_interesting',distinct=True,widget=CheckboxInput(attrs={'class':'filter','id':'radio1','checked':False}))

class Meta:
    model = Post
    fields = []

def ordering_filter(self,queryset,name,value):
    return queryset.order_by(value)

def filter_interesting(self,queryset,name,value):
    if value:
        followed = User.objects.filter(followers=getattr(self.request,'user'))
        return queryset.annotate(flag=Q(author__in=followed)).order_by('-flag','-created_at')
    return queryset

#views.py

class HomePage(LoginRequiredMixin,ListView):
model = Post
login_url = reverse_lazy('login')
context_object_name = 'filter'
template_name = 'main/home.html'

def get_queryset(self):
    posts = Post.objects.all().select_related('author','profile','author__profile').prefetch_related('liked','images','viewers','author__followers')
    f = PostFilter(request=self.request,queryset=posts,data=self.request.GET)
    return f

#main/home.html

<div class="cd-filter">
        <form method="get" class="cd-filter-form cd-filter-form--last">
            <div class="cd-filter-block">
                <div class="cd-filter-content">
                    <div class="cd-select cd-filters">
                        {{filter.form.ordering}}
                    </div>
                </div>
            </div>
            <div class="cd-filter-block">
                <ul class="cd-filter-content cd-filters list" style="list-style: none;">
                    <li>
                        {{filter.form.is_interesting}}
                    </li>
                </ul>
            </div>
            <button class="cd-filter__submit" type="submit">Confirm</button>
        </form>

#комментарий от меня

проблема в том, что я не могу фильтровать по упорядочиванию и интересно сразу, я фильтрую только по полю ниже в объявлении полей класса (применяется только последний order_by) и поэтому, как я могу поместить их в один order_by?

Вернуться на верх