【问题标题】:How to create a Delete an item in DB from a confirmation pop up in Django?如何从 Django 中的确认弹出窗口中创建删除数据库中的项目?
【发布时间】:2018-03-13 18:31:28
【问题描述】:

我已经建立了一个网站,其中包含一个带有帖子的表格和一个删除按钮。 当您单击删除按钮时,它会显示一个弹出窗口,当您单击“确认”时,它应该删除该项目。

我不知道如何将确认按钮连接到删除我的项目的 urls.py。

  1. 我应该在 PostDelete 类中添加什么?
  2. 我应该在 HTML 中添加一些内容吗?表单正在使用 POST...

正如你所看到的,我在评论中有一些我尝试过的东西,比如 post.delete() 但它们都没有奏效......

请帮帮我,我很困惑,没有找到任何使用 django 确认淡入淡出选项的指南:(

谢谢!

index.html-

<button type="button" class="btn btn-info" data-toggle="modal" data-target="#MyModal" href="{% url 'delete_post' server.id %}">Delete <span class="glyphicon glyphicon-trash" </span></button>
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#MyModal">Edit <span class="glyphicon glyphicon-pencil" </span></button>
<div id ="MyModal" class="modal fade" role="dialog">
    <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                <form action="" method="post">{% csrf_token %}
                    <h4>Are you sure you want to delete?</h4>
                    <input type="submit" class="btn btn-danger btn-md" value="Confirm delete"/>
                        <button type="submit" class="btn btn-default" data-dismiss="modal">Cancel</button>
                </form>
            </div>
</div>

views.py -

from django.shortcuts import render_to_response
from django.shortcuts import render, redirect
from django.template import RequestContext
from django.views.generic import TemplateView, UpdateView, DeleteView,     CreateView
from DevOpsWeb.forms import HomeForm
from DevOpsWeb.models import serverlist
from django.core.urlresolvers import reverse_lazy

class HomeView(TemplateView):

template_name = 'serverlist.html'
#    def home(self, request):
#        entries = serverlist.objects.all()
#        return render_to_response('serverlist.html', {'Post' : entries })

    def get(self, request):
        form = HomeForm()
        posts = serverlist.objects.all()
        args = {'form' : form, 'posts' : posts}
        return render(request, self.template_name, args)
    def post(self,request):
        form = HomeForm(request.POST)
        posts = serverlist.objects.all()
        if form.is_valid(): # Checks if validation passed
            post = form.save(commit=False)
            post.save()
            text = form.cleaned_data['ServerName']
            form = HomeForm()
            return redirect('serverlist')
        args = {'form': form, 'text': text}
        return render(request, self.template_name,args)

class PostDelete(DeleteView):
    model = serverlist
    success_url = reverse_lazy('serverlist') # This is where this view will


#    def delete(self,request,id=None):
#        post = get_object_or_404(serverlist,id=id)
#        post.delete()
#        return redirect('serverlist')

urls.py -

from django.conf.urls import url, include
from DevOpsWeb.views import HomeView
from DevOpsWeb.views import PostDelete
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = [
    # Examples:
    url(r'^$', HomeView.as_view(), name='serverlist'),

    # Uncomment the admin/doc line below to enable admin documentation:
     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
     url(r'^delete/(?P<pk>\d+)/$', PostDelete.as_view(),     name="delete_post"),
     url(r'^django_popup_view_field/',     include('django_popup_view_field.urls', namespace="django_popup_view_field")),
    # Uncomment the next line to enable the admin:
     url(r'^admin/', include(admin.site.urls)),
]

【问题讨论】:

    标签: javascript python html mysql django


    【解决方案1】:

    我正在向您展示一种可以继续进行的方式:

    {% for server in posts %} 
    <tr>
        <td>{{ server.ServerName }}</td>
        <td>{{ server.Owner }}</td>
        <td>{{ server.Project }}</td>
        <td>{{ server.Description }}</td>
        <td>{{ server.IP }}</td>
        <td>{{ server.ILO }}</td> 
        <td>{{ server.Rack }}</td>
        <td>{{ server.Status }}</td>
        <td><a href="#delete-server-{{server.id}}" data-toggle="modal">Delete Server</a></td>
    
        <!-- The modal needs to be inside the loop, with the id from href attr of delete button -->
    
        <div class="modal-dialog" id="delete-server-{{server.id}}">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                </div>
                <div class="modal-body">
                    <form action="{% url 'delete_post' server.id %}" method="post">{% csrf_token %}
                        <h4>Are you sure you want to delete?</h4>
                        <button type="submit" class="btn btn-danger btn-md">Confirm delete</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
                    </form>
               </div>
            </div>
        </div>
    </tr>
    {% endfor  %}
    

    【讨论】:

    • 不是应该的吗?
      {% csrf_token %}
    • 是的,最好通过表单POST来完成
    • 这是我得到的错误::( TemplateSyntaxError at / 无法解析剩余部分:'{{' from '{{'
      {% csrf_token %}
    • 错误是因为变量的{{}}不小心关闭了url的{
    • 我已经在模态框内添加了表单,所以你可以这样继续!
    【解决方案2】:

    你在 index.html 中的表单标签应该是这样的

    <form action="{% url 'delete_post' server.id %}" method="post">
    

    希望这可能会有所帮助。

    【讨论】:

    • 哦,还有一个问题!它总是删除第一个项目而不是按钮旁边的项目?为什么?我确实写了server.id!它总是删除第一个。你有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多