细节视图上的双重过滤器 [英] Double filter on detail view
本文介绍了细节视图上的双重过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用基于函数的视图来创建详细视图.此视图必须仅显示已发布的帖子和非草稿的帖子.
I'm trying to create a detail view using function based view. This view must make visible only the already published posts and the non draft posts.
def singlePost(request, slug_post, slug_category):
post_category = get_object_or_404(BlogCategory, slug_category=slug_category)
if post_filter == BlogPost.objects.filter(draft=True):
raise PermissionDenied
if post_filter == BlogPost.objects.filter(publishing_date__gt=datetime.datetime.now()):
raise PermissionDenied
else:
post_filter == BlogPost.objects.all()
post_details = get_object_or_404(post_filter, slug_post=slug_post)
category_post_details = BlogPost.objects.filter(post_category=post_category)
context = {
"post_category": post_category,
"post_details": post_details,
"category_post_details": category_post_details,
}
template = 'blog/reading/single_post.html'
return render(request, template, context)
但是当我使用它时,我看到以下错误消息:
But when I use this I see this error message:
未定义名称"post_filter"
name 'post_filter' is not defined
我该如何解决?
注意:以这种方式视图工作正常
NB: the view works fine in that way
def singlePost(request, slug_post, slug_category):
post_category = get_object_or_404(BlogCategory, slug_category=slug_category)
post_details = get_object_or_404(BlogPost, slug_post=slug_post)
category_post_details = BlogPost.objects.filter(post_category=post_category)
context = {
"post_category": post_category,
"post_details": post_details,
"category_post_details": category_post_details,
}
template = 'blog/reading/single_post.html'
return render(request, template, context)
推荐答案
根据给出的信息,我建议使用以下方法.
Based on the information given, I would recommend using the following approach.
使用单个过滤器获取博客文章的条件,如果不存在,则会引发错误.
Use a single filter to get the criteria for your blog post and raise an error if it doesn't exists.
post_filter = BlogPost.objects.filter(draft=False,
publishing_date__lt=datetime.datetime.now()):
if not post_filter.exists():
raise PermissionDenied
else:
post_details = get_object_or_404(post_filter, slug_post=slug_post)
这篇关于细节视图上的双重过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文