Как развернуть класс фильтра в Python/Django?

Мне нужно было отфильтровать экземпляры моделей с помощью пользовательской функции, и, используя

Post.objects.filter(func)

не помогло, я получил ошибку типа "object is not iterable, поэтому я выбрал

    def filter_posts(x):
        if x.author in followed_author_list:
            return True
        else:
            return False

posts = filter(filter_posts, Post.objects.all())
return render(request, 'main.html', {'posts':posts })

И это сработало, но теперь я не могу развернуть список, потому что я хочу упорядочить его так, чтобы самый новый был последним. Если я использую list(), то сообщения вообще перестают появляться на моем сайте, потому что я предполагаю, что это не другой тип?

Вопрос в том, как мне отфильтровать класс, или вообще сделать так, чтобы мои сообщения отфильтровывались в обратном порядке?

def users_by_active(active: bool):
    users = User.objects.all()
    ids = [user.id for user in users if user.is_active == active]
    return users.filter(id__in=ids)

вы можете сделать что-то похожее на эту функцию

Желаю удачи

Итак, я послушал ваши комментарии и начал искать как сделать запрос к БД не загружая всю ее, и пришел к выводу, что objects.filter(), о котором я говорил, является ленивым методом для запросов, поэтому мое решение таково

        followed_obj = Following.objects.filter(following_user=current_profile)
    followed_author_list = []
    for followed in followed_obj:
        followed_author_list.append(followed.profile.owner)
    posts = Post.objects.none()
    for author in followed_author_list:
        posts |= Post.objects.filter(author=author)
    posts = posts.order_by('date').reverse()

Спасибо всем за ваш вклад и помощь в становлении меня как лучшего разработчика :)

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