Django фильтрация по двум категориям логика - PullRequest
0 голосов
/ 13 апреля 2020
def post_list(request):

    school_slug = request.GET.get('school', None)
    category_slug = request.GET.get('category', None)

    if VideoPost.objects.filter(approve = 1).exists():

        posts = VideoPost.objects.all().filter(approve = 1)

        if school_slug:
            posts = posts.filter(school=school_slug)

        if category_slug:
            posts = posts.filter(category=category_slug)

        posts = posts.order_by('-date_posted')

        return render(request, 'stories/post_list.html', {'posts': posts})
    return render(request, 'stories/no_post.html')

Я фильтрую сообщения, получая параметр URL, который будет

1) example.com/post/ для отображения всех сообщений

2) example.com/post/?category=something для отображения всех сообщений с something категория

3) example.com/post/?category=something&school=someschool для отображения с двумя фильтрами

4) Нет записи. html страница, когда нет записи в категории.

Первая три фильтра работают нормально, но как я должен фильтровать для отображения страницы no_post. html? Я попытался отфильтровать в exist (), тогда он правильно отобразил бы no_post. html, но не правильно отобразил бы 1).

Как бы я мог заставить работать все 4 опции?

1 Ответ

1 голос
/ 13 апреля 2020

Вы должны проверить, существует ли пост за всеми фильтрами

def post_list(request):

    school_slug = request.GET.get('school', None)
    category_slug = request.GET.get('category', None)

    posts = VideoPost.objects.all().filter(approve = 1)

    if school_slug:
        posts = posts.filter(school=school_slug)

    if category_slug:
        posts = posts.filter(category=category_slug)

    posts = posts.order_by('-date_posted')

    if not posts:
        return render(request, 'stories/no_post.html')

    return render(request, 'stories/post_list.html', {'posts': posts})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...