Выделить сортировку в Django проекте в отдельную функцию
Существуют 2 функции: функция index выводит срез [:5] отфильтрованных карточек постов на главную страницу, функция post_detail отвечает за содержимое этих карточек.
def index(request):
CONST_NUMBER_OF_POSTS: int = 5
post_list = Post.objects.filter(is_published=True,
category__is_published=True,
pub_date__lte=timezone.now()
)[:CONST_NUMBER_OF_POSTS]
context = {
'post_list': post_list,
}
return render(request, 'blog/index.html', context)
def post_detail(request, id):
post = get_object_or_404(Post,
is_published=True,
category__is_published=True,
pub_date__lte=timezone.now(),
id=id)
if (post.pub_date > timezone.now() or not post.is_published
or not post.category.is_published):
raise Http404
context = {
'post': post,
}
return render(request, 'blog/detail.html', context)
Необходимо логику фильтрации перенести в отдельную функцию, в том числе, конструкцию if. Как это реализовать в коде?
Я пробовал вот так это реализовать:
def sort(self):
return self.filter(is_published=True,
category__is_published=True,
pub_date__lte=timezone.now()
)
, но ведь .filter не будет работать без Post.objects, или я ошибаюсь? В таком случае, если я правильно функцию написал, как её правильно вставить в функцию index, post_detail?
Я разобрался. Действительно, нужно было передавать query_set
в переменной, и: