【问题标题】:how i can delete multiple record or objects in django?我如何在 django 中删除多个记录或对象?
【发布时间】:2020-04-06 08:04:52
【问题描述】:

我想使用 html 复选框删除多条记录,但我不知道如何执行此任务。目前在我的项目中,我通过通用视图实现单个删除记录或对象,如下面的代码所示。

如何使用复选框删除多条记录?
我需要在我的代码中做哪些更改?

所有代码都编辑了回溯错误@ruddra

views.py

class DeleteProducts(SuccessMessageMixin, View):
    success_url = reverse_lazy('stock:stock')
    success_message = "Products {} are deleted successfully."

    def post(self, request, *args, **kwargs):
        products = self.request.POST.getlist('product')
        products_deleted = Product.objects.filter(pk__in=products).delete()
        msg = self.success_message.format(', '.join(products_deleted))
        messages.success(self.request, msg, extra_tags='alert-danger')
        return HttpResponseRedirect(self.success_url)

urls.py

      path('delete', login_required(DeleteProducts.as_view(), login_url='login'), name='deleteproducts'),

template.html

{% extends 'base.html' %}
{% block content %}
<div>
  <h2 class="text-center" ><i>Stock!</i></h2>
    {% if messages %}
    {%for message in messages%}
        <div class="alert {{ message.tags }}" role="alert">
            {{ message }}
        </div>
    {% endfor %}
    {% endif %}
  <hr/>
<form method="POST" action="{% url 'stock:deleteproducts' %}">
{% csrf_token %}
  {% for product in page_obj %}

  <div class="row" >
      <input type="checkbox" value="{{ product.id }}">
    <div class="col-sm-2" >
          <h5>{{ product.id }}</h5>
          <img src="{{ product.Picture.url }}" height="120px"  />
    </div>
    <div class="col-sm-4" >
      <h5><u>Product Name</u>: {{ product.pro_name }}</h5>
      <h6><u>Company Name</u>: {{product.companyName}}</h6>
      <div class="row" >
        <div class="col-sm" >
           <p>Purchase Price: <b>{{product.Purchase_Price}}</b></p>
        </div>
        <div class="col-sm" >
          <p class="pt-0">Sale Price: <b>{{product.Sale_Price}}</b> </p>
        </div>
      </div>
      <div class="row" >
        <div class="col-sm" >
           <p>Quantity <b>{{product.Quantity}}</b></p>
        </div>
        <div class="col-sm" >
          <p> Added By:  <b>{{product.saler}}</b> </p>
        </div>
      </div>
    </div>
       <div class="col-sm-4" >
         <p><b>Added Date</b>:{{ product.pub_date }}</p>
         <hr/>
         <center>
           <a href="{% url 'stock:editproduct' product.id %}" class="btn btn-success" >Edit</a>

         </center>

    </div>

  </div>
  <hr/>

  {% endfor %}
 <input type="submit" class="btn btn-danger" value="Delete" >
</form>
    <div class="pagination " >
        <div class="step-links">
            {% if page_obj.has_previous %}
                <a href="?page=1" class="btn btn-sm btn-primary">&laquo; first</a>
                <a href="?page={{ page_obj.previous_page_number }}" class="btn btn-sm btn-success">previous</a>
            {% endif %}


            {% if page_obj.has_next %}
                <a href="?page={{ page_obj.next_page_number }}" class="btn btn-sm btn-success " >next</a>
                <a href="?page={{ page_obj.paginator.num_pages }}" class="btn btn-sm btn-primary" >last &raquo;</a>
            {% endif %}
            <br/>
                <div
                        class="current">
                Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
            </div>

        </div>
    </div>



</div>

{% endblock %}

追溯

Internal Server Error: /stock/delete
Traceback (most recent call last):
  File "C:\Users\Adil Ijaz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Adil Ijaz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Adil Ijaz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Adil Ijaz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Users\Adil Ijaz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\Adil Ijaz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\Adil Ijaz\Desktop\onlineProject\market\stock\views.py", line 131, in post
    msg = self.success_message.format(', '.join(products_deleted))
TypeError: sequence item 0: expected str instance, int found

【问题讨论】:

    标签: html python-3.x django


    【解决方案1】:

    您可能无法对 DeleteView 执行此操作,因为它希望删除一个实例。为此,您需要创建一个新视图。像这样:

    from django.views import View
    from django.http import HttpResponseRedirect
    
    class DeleteProducts(SuccessMessageMixin, View):
        success_url = reverse_lazy('stock:stock')
        success_message = "Products {} are deleted successfully."
    
        def post(self, request, *args, **kwargs):
            products = self.request.POST.getlist('product')
            products_deleted = Product.objects.filter(pk__in=products).delete()
            msg = self.success_message.format(', '.join(map(str, products_deleted)))
            messages.success(self.request, msg, extra_tags='alert-danger')
            return HttpResponseRedirect(self.success_url)
    

    然后更新网址:

    path('delete', login_required(DeleteProducts.as_view(), login_url='login'), name='deleteproducts'),
    

    在模板中:

    <form method="POST" action={% url 'deleteproducts' %}>
    

    我正在使用request.POST.getlist 从发布请求中获取多个项目(或产品 ID)。

    【讨论】:

    • sequence item 0: expected str instance, int found 面临这个错误
    • 我如何将所有完整的追溯错误粘贴到评论部分?@ruddra
    • 您需要使用回溯更新您的问题
    • 现在可以正常工作了。谢谢@ruddra ...html文件中有错误我错过了属性name='product'
    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2012-02-26
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2020-06-15
    • 2018-11-30
    • 2021-10-24
    相关资源
    最近更新 更多