you can view full source code here dpaste.com/hold/167199
Error:
delete() takes exactly 2 arguments (1 given)
Copied from linked code:
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开发者_JAVA百科="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()
This is how, i am using it.First,select should display the values presented in db into drop down box but it is rendering dd box,values are empty.
In views,i get 2 params needed only 1 given and problemwith urls.py is 404.
You are mixing the usage of GET
and POST
requests. You have to do the following:
Either use GET
requests, then you have to change your template this way:
<form method="GET" action="/customer/{{customer.customer_name}}/delete/">
<input type="submit" value="delete">
</form>
The name must be part of the URL, because you have set up your urls.py
this way. I don't recommend this way, as everybody can just type the URL customer/foo/delete
into the address bar to delete customer foo
.
The other way is to use post. Therefore you have to change your URL pattern and the view:
(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()
But as it seems that you can only delete one customer, there is no need to create a select input element as it only contains one value.
Update:
To make this for all customers, you have to get all of them in your view, e.g. in a variable customers
and pass this to the template. In the template, you iterate over all of them:
<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>
As for the part Django template nt displaying in drop down box I don't know what you mean with it, maybe you can clarify what you want.
精彩评论