python - /post/106/ 处的 AttributeError
问题描述
我想为我的 django post 应用程序创建一个“更新帖子”功能。但我得到一个错误。
/post/106/ 处的 AttributeError
'Post' 对象没有属性 'slug'
视图.py
def post_update(request, slug):
if not request.user.is_authenticated():
return Http404()
post = get_object_or_404(Post, slug=slug)
form = PostForm(request.POST or None, request.FILES or None, instance=post)
if form.is_valid():
form.save()
messages.success(request, "updated")
return HttpResponseRedirect(post.get_absolute_url())
context = {
'form': form
}
return render(request, "blog/post_edit.html", context)
模型.py
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = RichTextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
def get_update_url(self):
return reverse('post:update', kwargs={'slug': self.slug})
post_detail.html
<a href="{{ post.get_update_url }}" class="btn btn-default" role="button">update</a>
网址.py
...
url(r'^(?P<slug>[\w-]+)/update/$', post_update, name="update"),
我的错误怎么办?谢谢。
解决方案
您需要创建一个SlugField
然后编写一个save()
函数以slug
在某个字段的基础上创建,然后它应该可以正常工作。
from django.utils.text import slugify
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=40)
text = RichTextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
# Write the save() method
def save(self):
if not self.id:
self.slug = slugify(self.title)
super(Post, self).save()
def get_update_url(self):
return reverse('post:update', kwargs={'slug': self.slug})
推荐阅读
- python - 从 tox.ini 确定所需的 Python 版本并在需要时安装
- javascript - 一个用于禁用某些 CheckBoxFor 的复选框
- wordpress - Wordpress update_post_meta 错误序列化
- python - 抓取信息页面
- ruby - 如何在 VSCode 中更改终端命令类型
- python-3.x - 关闭在另一个函数中打开的文件时如何消除“名称错误”?
- c# - WPF 将快捷方式添加到 Controls.Page
- python-2.7 - Q. 从 Python 中的另一个函数终止一个函数中调用的进程
- android - OpenCV 捕获的图像分辨率与 Fotoapparat
- python - 将字典写入txt文件,有什么方法可以格式化吗?