开发者

Django template nt displaying in drop down box and view is showing error

开发者 https://www.devze.com 2022-12-21 23:10 出处:网络
you can view full source code here dpaste.com/hold/167199 Error: delete() takes exactly 2 arguments (1 given)

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消