您可以在此处查看完整的源代码dpaste.com/hold/167199
错误:
delete() takes exactly 2 arguments (1 given)
从链接代码复制:
index.html
............................................
<form method="POST" action="/customer/(?P<name>[a-z]*)/delete/">
<div style="float: right;
margin: 0px; padding: 05px; ">
<label for="id_customer">Customer:</label>
<select name="customer" id="id_customer">
<option value="" selected="selected">---------</option>
<option value="{{ customer.customer_name|escape }}"></option>
</select>
<input type="submit" value="delete">
</div>
</form>
......................................
Urls.py
(r'^customer/(?P<name>[a-z]*)/delete/', 'quote.excel.views.delete')
Views.py
def delete(request, name):
if request.method == "POST":
Customer.objects.get(name=name).delete()
这就是我正在使用它的方式。首先,select应该将db中显示的值显示在下拉框中,但它是渲染dd框,值为空。
在视图中,我只需要1个给定的2个参数,而urls.py的问题是404。
答案 0 :(得分:1)
您正在混合GET
和POST
请求的使用情况。您必须执行以下操作:
要么使用GET
请求,那么您必须以这种方式更改模板:
<form method="GET" action="/customer/{{customer.customer_name}}/delete/">
<input type="submit" value="delete">
</form>
该名称必须是网址的一部分,因为您已经以这种方式设置了urls.py
。我不建议这样做,因为每个人都可以在地址栏中输入网址customer/foo/delete
来删除客户foo
。
另一种方式是使用帖子。因此,您必须更改您的网址格式和视图:
(r'^customer/delete/', 'quote.excel.views.delete')
def delete(request):
if request.method == "POST":
name = request.POST.get('customer', False)
if name:
Customer.objects.get(name=name).delete()
但由于您似乎只能删除一个客户,因此无需创建选择输入元素,因为它只包含一个值。
<强>更新强>:
要为所有客户制作此功能,您必须在视图中获取所有这些内容,例如在变量customers
中并将其传递给模板。在模板中,您遍历所有这些:
<form method="POST" action="/customer/delete/">
<label for="id_customer">Customer:</label>
<select name="customer" id="id_customer">
<option value="" selected="selected">---------</option>
{% for customer in customers %}
<option value="{{ customer.customer_name|escape }}">{{ customer.customer_name|escape }}</option>
{% endfor %}
</select>
<input type="submit" value="delete">
</form>
至于部分 Django模板nt显示在下拉框中我不知道你的意思,也许你可以澄清你想要的东西。