python - 如何使用 django 泛型类删除我的帖子?
问题描述
我想删除我的博客文章,但是当我点击确认删除时,它说
NoReverseMatch at /post/10/delete/
Reverse for 'post-by-author' with no arguments not found. 1 pattern(s) tried: ['post/detail/(?P<pk>[0-9]+)$']
Request Method: POST
Request URL: http://127.0.0.1:8500/post/10/delete/
Django Version: 3.0.2
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'post-by-author' with no arguments not found. 1 pattern(s) tried: ['post/detail/(?P<pk>[0-9]+)$']
Exception Location: /Users/antonia/PycharmProjects/MySite/venv/lib/python3.8/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 677
Python Executable: /Users/antonia/PycharmProjects/MySite/venv/bin/python
Python Version: 3.8.1
Python Path:
['/Users/antonia/PycharmProjects/MySite/mysite',
'/Library/Frameworks/Python.framework/Versions/3.8/lib/python38.zip',
'/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8',
'/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload',
'/Users/antonia/PycharmProjects/MySite/venv/lib/python3.8/site-packages',
'/Users/antonia/PycharmProjects/MySite/venv/lib/python3.8/site-packages/setuptools-40.8.0-py3.8.egg',
'/Users/antonia/PycharmProjects/MySite/venv/lib/python3.8/site-packages/pip-19.0.3-py3.8.egg']
Server time: Tue, 14 Jan 2020 21:25:06 +0000
删除帖子后,我想返回用户的帖子页面吗?我还为 Html 表单 post_confirm_delete 正确命名了该文件。
我试图将我在 reverse_lazy 中放入的内容更改为 (posts/post/blogs/blog/blog:index/blog:post-detail/blog:post-by-author) 似乎没有任何效果?
class PostDelete(DeleteView):
model = Post
success_url = reverse_lazy('post-by-author')
这个表格
{% extends "../base.html" %}
{% block content %}
<div class="container">
<h1>Delete Post</h1>
<p>Are you sure you want to delete this post: {{ post }}?</p>
<form action="" method="POST">
{% csrf_token %}
<input type="submit" action="" value="Yes, delete." />
</form>
</div>
{% endblock %}
我的模型
class PostAuthor(models.Model):
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True, related_name='authors')
bio = models.TextField(max_length=400, help_text="Enter your bio details here.")
class Meta:
ordering = ["user", "bio"]
def get_absolute_url(self):
return reverse('post-by-author', args=[str(self.id)])
def __str__(self):
return self.user.username
class Post(models.Model):
title = models.CharField(max_length=200, unique=False)
slug = models.SlugField(max_length=200, null=True, blank=True)
author = models.ForeignKey(PostAuthor, on_delete=models.CASCADE, null=False, blank=True)
updated_on = models.DateTimeField(auto_now=True)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=0)
class Meta:
ordering = ['-created_on']
def get_absolute_url(self):
return reverse('post-detail', args=[str(self.id)])
def __str__(self):
return self.title
网址文件
urlpatterns = [
path('', views.IndexPage.as_view(), name='index'),
path('posts/', views.PostList.as_view(), name='all-posts'),
path('post/detail/<int:pk>', views.PostListbyAuthorView.as_view(), name='post-by-author'),
path('post/author/<int:pk>', views.PostDetail.as_view(), name='post-detail'),
path('post/create/', views.PostCreate.as_view(), name='post-create'),
path('post/<int:pk>/edit/', views.PostUpdate.as_view(), name='post-edit'),
path('post/<int:pk>/delete/', views.PostDelete.as_view(), name='post-delete'),
path('post/<int:pk>/comment/', views.PostComment.as_view(), name='post-comment'),
path('accounts/', include('django.contrib.auth.urls')),
]
解决方案
Django is expecting kwargs
, and not args
, in your model:
class PostAuthor(models.Model):
...
def get_absolute_url(self):
return reverse('post-by-author', kwargs={'pk':self.pk})
class Post(models.Model):
...
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk':self.pk})
Here are the docs for this topic.
推荐阅读
- python - 虚拟环境的特定 jupyter notebook 配置文件
- mysql - 包含范围时,MySQL相关子查询非常慢
- python - 如何在 PyQt5 应用程序中显示来自 moviepy 的 write_audiofile 的转换进度?
- javascript - React-native-google-places-autocomplete:将动态字符串变量传递给查询
- swift - SwiftUI:当 JSON 文件从后端接收到新条目时,如何发送推送通知?
- outlook - 如何在 Outlook 的 VSTO 插件中获取 Outlook 的 Web 插件 ItemId?
- f# - 有没有办法连接两个 IActorRef 数组?
- python - pynput.keyboard 怎么能用到 f20?
- mongodb - Mongodb收集对象总小时收集
- python - 如何配置 Flask Mail 以使用 Postfix