如何通过模板从数据库中删除记录?

时间:2020-10-10 17:08:40

标签: django django-templates

如何通过模板从数据库中删除记录?例如,我有一个从数据库接收并显示在页面上的评论列表,在它们旁边有一个带有篮子的图标,当我单击该图标时,应从数据库中删除该条目。

1 个答案:

答案 0 :(得分:0)

您的删除按钮(或输入)可能位于表单内部,因为您可能希望使用POST进行删除,从而避免了通用DeleteView的默认行为(GET会显示确认页面,但它不是很好的UX)。我想你正在做一个for循环:

模板:

{% for object in object_list %}
...
<form method="POST" id="{{object.pk}}"  action="/delete_url/{{object.pk}}/" ...> {%csrf_token%}
    <button class="your-class" id="{{object.pk}}" method="submit" ...>
</form>
...
{% endfor %}

在您的urls.py中定义网址路径:

from your_path.views import MyDeleteView
...
path("/delete_url/<pk>/", MyDeleteView.as_view()),

现在,您应该定义删除视图。最简单的方法是从通用视图继承DeleteView:

from django.views.generic.edit import DeleteView 
from your_path.models import MyModel

class MyDeleteView(DeleteView):
    model = MyModel
    sucess_url = "/home/"

对于删除确认,您可以使用javascript。这是我使用的示例,可以随时进行调整:

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@10"></script>
<script type="text/javascript">
    $(function () {
        $(".your-class").click(function(e){
            e.stopPropagation();
            e.stopImmediatePropagation();
            e.preventDefault();. //prevent instant submit
            Swal.fire({
                  title: 'Deseja deletar este usuário? Esta ação não poderá ser desfeita.',
                  buttonsStyling: false,
                  confirmButtonText: "<i class='la la-trash'></i> Deletar",
                  customClass: {
                      confirmButton: "btn btn-danger",
                      cancelButton: "btn btn-default"
                  },
                  showCancelButton: true,
                  cancelButtonText: `Cancelar`,
                  icon: "warning",
            }).then((result) => {
                  if (result.isConfirmed) {
                 Swal.fire({
                      title: 'Deletando colaborador...',
                      timer: 1000,
                      showCancelButton: false,
                      showConfirmButton: false
                  });

                  var id = $(this).attr('id');
                  setTimeout(function() {
                      $('form#'+id).submit();
                   }, 1000); // 1 second delay
             }
             // else if (result.isDenied) {
             //   Swal.fire('Changes are not saved', '', 'info');
             //   e.preventDefault();
             // }
      });
    });
});
</script>

如果您只想要最简单的GET渲染确认页面而没有任何JavaScript,请删除表单标签并使用锚点( ...)