如何解决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 参数中的 id
是 Posty
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 举报,一经查实,本站将立刻删除。