微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Django - 带 pk 的 DeleteView没有 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,unique=True)
    content = models.TextField(max_length=250,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>/',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 和 Posty ID 传递到此视图中

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

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})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。