python - django NoReverseMatch 尝试从数据库中删除对象时
问题描述
我是 django 新手,在尝试删除项目数据库中的对象时遇到了问题。我在 views.py 中创建了一个函数,该函数应该删除传递给它的对象。问题是,我的模板似乎没有正确地将信息传递给 url,所以整个链都在中断。
这是views.py中的删除功能
def delete_player(request, id):
quarterback = Quarterback.get(id=id)
quarterback.delete()
return redirect('show')
模型“Quarterback”在 models.py 中
class Quarterback(models.Model):
name = models.CharField(max_length=20)
在我的名为“show.html”的模板中,我有这个
<tr>
<td>{{ QB }}
<a href="{% url 'delete_player' quarterback.id %}">Delete</a>
</td>
</tr>
这是 urls.py 中的路径
path('delete_player/<int:id>', views.delete_player, name="delete_player")
这一切都不断返回“NoReverseMatch:'delete_player'的反向参数'('',)'未找到。尝试了1个模式:['game/delete_player/(?P[0-9]+)$' ]"
错误消息还一直像这样在views.py中引用我的show() ...
C:\Users\Leigh\Desktop\fantasyfootball\game\views.py, line 321, in show
return render(request,"game/show.html", context) …
▼ Local vars
Variable Value
K
'Greg Zuerlein K 10.0'
QB
'Russell Wilson QB 41.34'
RB
'Mark Ingram RB 31.5'
TE
'Austin Hooper TE 18.6'
WR
'Mike Evans WR 37.0'
context
{'K': 'Greg Zuerlein K 10.0',
'QB': 'Russell Wilson QB 41.34',
'RB': 'Mark Ingram RB 31.5',
'TE': 'Austin Hooper TE 18.6',
'WR': 'Mike Evans WR 37.0'}
request
<WSGIRequest: GET '/game/show'>
user
<SimpleLazyObject: <User: admin>>
这是 views.py 中的完整 show()
def show(request):
user = request.user
if user.is_authenticated:
try:
QB = Quarterback.objects.values_list('name', flat="True")[0]
except IndexError:
QB = 'empty'
try:
RB = Runningback.objects.values_list('name', flat="True")[0]
except IndexError:
RB = 'empty'
try:
WR = Widereceiver.objects.values_list('name', flat="True")[0]
except IndexError:
WR = 'empty'
try:
TE = Tightend.objects.values_list('name', flat="True")[0]
except IndexError:
TE = 'empty'
try:
K = Kicker.objects.values_list('name', flat="True")[0]
except IndexError:
K = 'empty'
context = {
'QB': QB[0:],
'RB': RB[0:],
'WR': WR[0:],
'TE': TE[0:],
'K': K[0:],
}
return render(request,"game/show.html", context)
我不确定 show() 函数如何以及为什么在这里相关,以及我需要在这里修复什么。看起来模板没有传递 id,因此 url 不匹配。我完全不知道如何让对象的 id 正确传递。当我在终端中使用 dbshell 检查数据库中的表时,这些表带有前缀“game”(例如“game_quarterback”)(“game”是我的应用程序的名称)。我可以检查桌子里面有什么,玩家的名字在那里。还有一个 id 列。在这种情况下,如何让 id 从模板中传递?任何意见,将不胜感激。
解决方案
我相信问题在你看来。QB = Quarterback.objects.values_list('name', flat="True")[0]
是一个字符串,实际上是 Quaterback 模型的名称字段值。因为values_list
有了flat=True
return list
,你就可以访问它的第一个元素。之后,在组装上下文时,您实际上使用了子字符串QB
变量。所以,当访问QB
你的模板{% url 'delete_player' QB.id %}
QB
中的上下文变量实际上是一个字符串,它当然没有id
参数,这会导致一个空字符串,因为它是无效的变量。有关更多信息,请参阅Django 文档。因此,您需要以某种方式将 QB 模型实例传递给模板,或者它的实际id
值。
推荐阅读
- symfony - 我需要将 SQL 查询转换为 Doctrine Query Builder
- amazon-web-services - Route53 的 AWS S3 重定向不适用于 HTTPS
- javascript - 使用 window.attachEvent 点击事件
- yum - 配置:错误:未安装包,但安装了同名包
- drive - 如何写入 PhysicalDrive?
- xcode - 如何摆脱空文件中的幻影 Xcode 错误?
- php - 将日期动态分配给数组中的多个值 - php
- haskell - 我们能想到 Haskell 中的非对称乘积数据类型吗?
- mysql - SQL 实现 - 类似社交媒体的功能
- facebook - Facebook 开发者应用审查 - 您的提交必须包含 pages_read_engagement 才能使用 instagram_basic