Django 如何将 slug 表示为基于函数的视图的 ID
Django How to represent slug as ID for function based view
我正在学习 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()
model.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.pypost = Post.objects.get(id=slug)
,我觉得这是错误的表述,正确的做法是什么?
我得到以下代码的错误
非常感谢任何帮助..提前致谢
假设您的 post 模型有一个 slug 字段,您需要执行以下操作:
post = Post.objects.get(slug=slug)
可译为:
post = Post.objects.get(<name_of_field>=<argument_in_url>)
错误表明 Post
模型(django 自己创建)中的 id
字段是一个 AutoField
(检查 this) 就 sql
而言,它基本上是一个 bigint
字段。因此,在查询 id
字段时,它需要一个强制性的 int
值,否则将 raise
一个 exception
.
在您的情况下,Post
模型应该有一个 slug
字段,如果它不适合创建一个如下所示,
class Post(models.Model):
...
...
slug = models.SlugField(max_length=100)
...
...
并将您的查询更新为,
post = Post.objects.get(slug=slug)
我正在学习 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()
model.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.pypost = Post.objects.get(id=slug)
,我觉得这是错误的表述,正确的做法是什么?
我得到以下代码的错误
非常感谢任何帮助..提前致谢
假设您的 post 模型有一个 slug 字段,您需要执行以下操作:
post = Post.objects.get(slug=slug)
可译为:
post = Post.objects.get(<name_of_field>=<argument_in_url>)
错误表明 Post
模型(django 自己创建)中的 id
字段是一个 AutoField
(检查 this) 就 sql
而言,它基本上是一个 bigint
字段。因此,在查询 id
字段时,它需要一个强制性的 int
值,否则将 raise
一个 exception
.
在您的情况下,Post
模型应该有一个 slug
字段,如果它不适合创建一个如下所示,
class Post(models.Model):
...
...
slug = models.SlugField(max_length=100)
...
...
并将您的查询更新为,
post = Post.objects.get(slug=slug)