【发布时间】:2021-06-24 16:48:03
【问题描述】:
仅当多个用户的帖子标题相同时才会发生此错误。
例如,如果 john 有一个标题为“mypage”的页面,如果其他用户的页面标题与 john 相同,则会显示此错误。
`MultipleObjectsReturned at /john/mypage/update/` get() returned more than one Post -- it returned 2!
但如果没有其他人拥有它,则尝试更新帖子时不会显示错误。
class PostUpdateView(LoginRequiredMixin, UpdateView):
model = Post
form_class = PostForm
def form_valid(self, form):
form.instance.author = self.request.user ##author = current logged in user
return super().form_valid(form)
def test_func(self):
post = self.get_object()
if self.request.user == post.author:
return True
return False
class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Post
success_url = '/'
def test_func(self):
post = self.get_object()
if self.request.user == post.author:
return True
return False
型号
class Post(models.Model):
title = models.CharField(max_length=100, default=None)
author = models.ForeignKey(User, on_delete=models.CASCADE)
slug = AutoSlugField(populate_from='title', null=True)
def get_absolute_url(self):
return reverse('post-detail', kwargs={'slug': self.slug, 'author': self.author})
网址
urlpatterns = [
path('landingpage/new/', PostCreateView.as_view(), name='post-create'),
path('<str:author>/<slug:slug>/', PostDetailView.as_view(), name='post-detail'),
path('<str:author>/<slug:slug>/update/', PostUpdateView.as_view(), name='post-update'),
path('<str:author>/<slug:slug>/delete/', PostDeleteView.as_view(), name='post-delete'),
] + static(settings.M
EDIA_URL、document_root=settings.MEDIA_ROOT)
【问题讨论】:
-
这意味着有 两个
Posts 和 as slugmypage。请注意,您没有过滤Post的作者,所以如果两个作者有一个mypage,那么这将引发错误。 -
究竟为什么将
author存储在Post中? -
在post模型里,我忘了加进去