tags:

views:

151

answers:

1

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="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.

+1  A: 

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.

Felix Kling
In the db, it will list the customers in drop down box.In my above template ,you could see selet,it should feth customers name from bak end and display it in template.THanks for your help In the template drop down box will list customers,i will select it when i press submit,it should delete the customer.
DAFFODIL
@Felix: In the db, it will list the customers in drop down box.In my above template ,you could see selet,it should feth customers name from bak end and display it in template. THanks for your help In the template drop down box will list customers,i will select it when i press submit,it should delete the customer
DAFFODIL
@DAFFODIL: So what is your problem still? That you want to have a list of customers in the select field instead of only one? I am sorry, but I don't understand your comment.
Felix Kling
@Felix: If,there are 10 customers in db ,i need them to be present in drop down box.The url has some proble,this is how ,i am using.see this, http://dpaste.com/hold/167685/
DAFFODIL
@DAFFODIL: See my updated answer.
Felix Kling
@Felix but still,i dnt get any data in drop down box and when ,i click the delete button this error is being displyed, 'str' object has no attribute 'POST'
DAFFODIL
@DAFFODIL: Oh my bad there was a mistake in the code. You have to get all customers in your view and set it in the template. E.g. `customers = Customer.objects.all()` and `return render_to_response('path/to/template', {'customers': customers,})` . Maybe you should read the tutorial first in order to learn how Django works.
Felix Kling