我对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 和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})