Как развернуть класс фильтра в 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()
Спасибо всем за ваш вклад и помощь в становлении меня как лучшего разработчика :)