如何在Django中使用按钮和GET请求删除模型?

时间:2016-05-26 15:03:23

标签: python html django

问题出在这里:在我呈现的html页面中,我有多个我称之为'缩略图'文本数据又称Notes(注意是我在Django中的模型)。我决定绑定按钮"删除"每个缩略图:用户点击"删除"在某些注意事项上 - >它被删除了。 我(在我的views.py中)得到了什么:

    ids=[x.id for x in Note.objects.all()]
    buttons = []
    for x in ids:
        buttons.append('DeleteButton' + str(x))
    if (request.GET.get(x for x in buttons)):
    print("Button click registered @ ", x)

嗯,它实际上并没有记录任何按钮点击,因此没有打印"点击已注册"。我的按钮在notes.html中显示如下:

<input type="submit" class="btn btn-default" value= "DeleteButton" name="DeleteButton{{ Note.id }}">

任何想法如何实际注册点击的任何按钮?提前谢谢!

1 个答案:

答案 0 :(得分:2)

request.GET.get(x for x in buttons)根本不做您的想法。它尝试获取单个参数,包括所有按钮名称的列表。这永远不会奏效。

但无论如何,这是一种非常低效的做事方式。而不是遍历每个ID并查看它是否在GET中,您应该只在GET中找到 的内容并提取其ID。类似的东西:

button_ids = []
for item in request.GET:
    if item.startswith('DeleteButton'):
        button_ids.append(item.replace('DeleteButton', ''))
notes = Note.objects.filter(id__in=button_ids)

更好的方法是使用实​​际的button标记而不是input,这样您就可以将值与按钮中显示的值分开。然后,您可以使用具有不同值的单个name

<button name="DeleteButton" value="{{ note.id }}">
    Delete
</button>

现在你可以做到:

button_ids = request.GET.getlist('DeleteButton')

(请注意,8之前的IE版本有按钮元素的各种错误,所以如果你需要支持这些,这不是一个好主意。)