Django - DeleteView with pk. 没有 Posty 匹配给定的查询



我对get_success_url有问题。

也就是说,我会从帖子中删除评论,然后应该回到带有帖子的页面。在这一刻,我"没有与给定查询匹配的 Posty"。 我不知道如何解决这个问题。我知道如何在没有pk;(的情况下在页面上反转

模型

class Posty(models.Model):
title = models.CharField(max_length=250, blank=False, null=False, unique=True)
sub_title = models.SlugField(max_length=250, blank=False, null=False, unique=True)
content = models.TextField(max_length=250, blank=False, null=False)
image = models.ImageField(default="avatar.png",upload_to="images", validators=[FileExtensionValidator(['png','jpg','jpeg'])])
author = models.ForeignKey(Profil, on_delete=models.CASCADE)
updated = models.DateTimeField(auto_now=True)
published = models.DateTimeField(auto_now_add=True)
T_or_F = models.BooleanField(default=False)
class Meta:
verbose_name_plural = 'Posty'
def __str__(self):
return str(self.title)
def save(self, *args, **kwargs):
if not self.sub_title:
self.sub_title = slugify(self.title)
super(Posty,self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('home:detail_post', kwargs={"id":self.id})

视图

class delete_post_comment(DeleteView):
model = CommentModelForm()
template_name = 'delete_comment_from_post.html'
def get_object(self):
id_ = self.kwargs.get("id")
return get_object_or_404(Posty,id=id_)
def get_success_url(self):
return reverse('home:detail_post')

网址

urlpatterns = [
path('', home, name='home'),
path('forum/', create_post_and_comment, name='forum'),
path('delete_post/<int:pk>/', delete_post_view.as_view(model=Posty), name='delete_post'),
path('update_post/<int:pk>/', update_post_view.as_view(model=Posty), name='update_post'),
path('delete_post_comment/<int:pk>/', delete_post_comment.as_view(model=CommentPost), name='delete_post_comment'),
path('update_post_comment/<int:pk>/', update_post_comment.as_view(model=CommentPost), name='update_post_comment'),
path('detail_post/<int:pk>/', contact, name='detail_post'),
path('testuje/<int:pk>/', contact, name='test')

形式

class CommentModelForm(forms.ModelForm):
content1 = forms.CharField(widget=forms.Textarea(attrs={}))
class Meta:
model = CommentPost
fields = ('content1',)

所以我可以在这里看到几个问题。首先,model类属性实际上是一个表单,而不是一个模型。因此,您需要将其更改为CommentPost,因为我假设这是注释的模型,这就是您要删除的内容。

您已经更改了get_object以获取一个Posty对象,然后该对象将删除它。如果随后尝试重定向回已删除Posty对象的详细信息视图,则可能会收到看到的错误,因为您刚刚删除了与查询匹配的Posty对象。

看起来您需要将注释 ID 和PostyID 传递到此视图中

此外,您还需要在reverse中包含 ID,因为 URL 需要 ID。因此,如果 GET 参数中的idPostyID,则以下内容将起作用;

class delete_post_comment(DeleteView):
model = CommentModelForm()
template_name = 'delete_comment_from_post.html'
def get_success_url(self):
return reverse(
'home:detail_post'
kwargs={'id': self.kwargs.get("id")}
)

视图

class delete_post_comment(DeleteView):
model = CommentPost
template_name = 'delete_comment_from_post.html'
def get_success_url(self):
return reverse('home:detail_post', kwargs={'pk': self.object.post.pk})

最新更新