如何使按钮单击更新数据库并重定向到Django中的视图?

时间:2017-10-22 15:37:26

标签: python html django url

我一直在努力解决这个问题,任何帮助都会受到赞赏!

基本上,我想要做的是点击Django中的HTML按钮,更改数据库中的字段(具有相关主键的对象),然后重定向回到主页。

清晰的示例:

目前,我正在使用网址:http://127.0.0.1:8000/result/edit/1/。 / 1 /是我想要更改的模型的主键。该模型是一个自定义组模型,具有一个名为“status”的字段。状态可以“已批准”或“未批准”:

status = models.CharField(max_length=30, default=Status.not_sent, choices=Status.choices(), null=False)

在网址结果/编辑/ 1 /我有一个“批准”按钮。当我单击按钮时,我想更改模型中的状态,并将其保存在数据库中。此外,在更改状态后,我想重定向回家。我在视图中编写了以下方法来执行此操作:

def approve_group(request, pk):
    group = Group.objects.filter(pk=pk)
    group.status = Status.approved
    group.save()

    return redirect(request, 'home')

在html中,我创建了以下按钮:

<a href="{% url 'resultregistration:approve_group' %}" />
    <button id="approve-btn" />Approve</button>
</a>

我的理由是该按钮应调用此URL,该URL应再次调用视图中的函数:

url(r'^result/approve/(?P<pk>\d+)/$', views.approve_group, name 
='approve_group'),

不幸的是,这只是一个NoReverseMatch错误,我不知道如何继续。

感谢您的时间!

2 个答案:

答案 0 :(得分:2)

这里缺少的是网址的pk。所以你需要填写它以便能够产生反向。您可以在django docs

中阅读更多相关信息
<a href="{% url 'resultregistration:approve_group' pk=my_pk %}" />
    <button id="approve-btn" />Approve</button>
</a>

答案 1 :(得分:1)

您的观点似乎有误。它不能是一个过滤器,因为它返回一个查询集,它必须是一个get查询,因为它返回有问题的对象:

def approve_group(request, pk):
    group = Group.objects.get(pk=pk)
    group.status = Status.approved
    group.save()
    return redirect(request, 'home')

我认为使用POST请求在Jquery中进行更改会更好。也许是这样的:

<form action="{% url 'resultregistration:approve_group' pk=my_pk %}" method=POST>
<button id="approve-btn" type="submit">Approve</button>
</form>

通过这样做,POST请求被发送到视图,并且作为回报可以被重定向到主页。请确保命名空间(resultregistration)是否正确给出。