在查询集中使用slug或pk获取对象

时间:2015-01-28 19:00:04

标签: regex django django-views

在django doc中说

>>> entry = Entry.objects.get(id=10)   

比这更快:

>>> entry = Entry.object.get(headline="News Item Title")

所以我改变了我的看法:

def myview(request, slug):
    post = get_object_or_404(Post, slug=slug)
    #...

到此:

def myview(request, id, slug):
    post = get_object_or_404(Post, pk=pk)
    #...

但在我看来,我的slug并没有被使用。在这种情况下,由于有效的正则表达式,下面的两个网址都会得到正确的帖子:

127.0.0.1:8000/posts/5/my-first-post/
127.0.0.1:8000/posts/5/mylblablabalg/

我不想要这个。然后我把我的观点强加于此:

def myview(request, id, slug):
    post = get_object_or_404(Post, pk=pk)
    if post.slug == slug:
        return render(request, 'blog/index.html', {'post': post})
    else:
        return HttpResponseRedirect(reverse('blog:index', args=(id, post.slug)))

它做了我想要的重定向相同页面的修正后的slug但我怀疑它是否在性能方面是好的。那么 db_index 呢?我应该在 SlugField 中使用它吗?

1 个答案:

答案 0 :(得分:0)

如果您要通过SlugField从数据库中提取帖子,那么您应该告诉数据库索引该字段以提高性能。您还应将其设置为唯一。