Django 如何将 slug 表示为基于函数的视图的 ID
Posted
技术标签:
【中文标题】Django 如何将 slug 表示为基于函数的视图的 ID【英文标题】:Django How to represent slug as ID for function based view 【发布时间】:2016-07-05 15:26:49 【问题描述】:我正在学习 django,遇到了 slug,我在发送参数到基于函数的视图时感到震惊
我的 urls.py
url(r'^(?P<slug>[\w-]+)/$', views.detail, name='detail'),
Views.py
def detail(request, slug):
post = Post.objects.get(id=slug)
comments=post.comment_set.all()
forms=CommentForm
if request.method == 'POST':
form=CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.title = post
print comment
comment.save()
else:
print form.errors
else:
form = PostForm()
模型.py
class Post(models.Model):
title=models.CharField(max_length=200)
description=models.TextField(max_length=10000)
pub_date=models.DateTimeField(auto_now_add=True)
slug = models.SlugField(max_length=40, unique=True)
def __unicode__(self):
return self.title
def description_as_list(self):
return self.description.split('\n')
def get_absolute_url(self):
return reverse('detail',kwargs='slug':self.slug )
在views.py post = Post.objects.get(id=slug)
的第二行视图中,我觉得这是错误的表示,正确的做法是什么?
我得到以下代码的 错误
任何帮助都非常感谢..提前感谢
【问题讨论】:
你能展示一下你的Post
模特吗?
@ParagTyagi-morpheus-..我已经通过添加 models.py 来编辑问题...请检查
请检查我的回答。
【参考方案1】:
错误表明Post
模型(django 自己创建)中的id
字段是AutoField
(检查this)基本上是bigint
字段就sql
而言。因此,在查询 id
字段时,它需要一个强制的 int
值,否则将是 raise
和 exception
。
在您的情况下,Post
模型应该有一个 slug
字段,如果它没有创建一个如下所示,
class Post(models.Model):
...
...
slug = models.SlugField(max_length=100)
...
...
并将您的查询更新为,
post = Post.objects.get(slug=slug)
【讨论】:
【参考方案2】:假设你的帖子模型有一个 slug 字段,你会想要这样做:
post = Post.objects.get(slug=slug)
可以翻译为:
post = Post.objects.get(<name_of_field>=<argument_in_url>)
【讨论】:
以上是关于Django 如何将 slug 表示为基于函数的视图的 ID的主要内容,如果未能解决你的问题,请参考以下文章
将 Pk 或 Slug 传递给 Django 中的通用 DetailView?