【发布时间】:2019-10-12 02:42:37
【问题描述】:
我在帖子网址中使用 slug,但在发送帖子更新时出现错误
views.py 中有这个错误return super().form_valid(form)
未找到带有关键字参数“{'pk': 2}”的“postdetail”的反向操作。尝试了 1 种模式:['post/(?P[^/]+)/$']
models.py
class Post(models.Model):
title = models.CharField(max_length=60)
slug = models.SlugField(max_length=60, unique=True)
first_image = models.ImageField(null=True, upload_to='post_image')
content = RichTextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
super().save(*args,**kwargs)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('postdetail', kwargs={'pk': self.pk})
def post_slug(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = unique_slug_generator(instance)
pre_save.connect(post_slug, sender=Post)
views.py
.........
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Post
fields = ['title', 'first_image', 'content']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def test_func(self):
post = self.get_object()
if self.request.user == post.author:
return True
return False
urls.py
from django.urls import path, include
from django.contrib.auth import views as auth_views
from .views import (
PostListView,
PostDetailView,
PostCreateView,
PostUpdateView,
PostDeleteView,
UserPostListView
)
from . import views
urlpatterns = [
......
path('post/<slug>/update/', PostUpdateView.as_view(), name='postupdate'),
path('post/<slug>/', PostDetailView.as_view(), name='postdetail'),
......
]
【问题讨论】:
-
添加有问题的
PostDetailView -
我很确定
post/<slug>/是错误的。我想你想要post/(?P<slug>)/ -
它不起作用
-
那么你可能做错了什么。
-
@RedCricket
post/<slug>/也是正确的。这是 Django 的新 url 模式语法。
标签: django django-views django-urls