删除Django中的特定行

时间:2018-09-24 09:34:29

标签: django html-table row

我对Django和HTML还是很陌生,并且想创建一个客户门户,客户可以在其中管理文档。我的问题是,每行都有自己的删除按钮,但是无论我单击哪个按钮,它总是删除最上面的行,而不删除我单击的行上的按钮。我认为您只需要查看模板即可看到错误,因为它删除了“ Akte”,但不是正确的模板。

模板:

<table class="center" id="myTable" style="border:solid;border-color:white;padding-bottom:1%;padding-left:1%;margin-top:3%;border-radius:6px;width:50%">
        <tr style="margin-left:30%;margin-right:30%;border:solid;border-color:white;padding-bottom:1%;padding-left:1%;margin-top:3%;border-radius:6px;color:white">
            <th class="cell" onclick="sortTable(0)">Aktenbarcode</th>
            <th class="cell" onclick="sortTable(1)">Ersteller</th>
            <th class="cell" onclick="sortTable(2)">Startdatum</th>            
            <th class="cell" onclick="sortTable(3)">Kundennummer</th>
            <th class="cell" onclick="sortTable(4)">Aktionen</th>   
        </tr>
        {%for Akte in akte_list%}
        <tr>
            <td id="{{Akte.Aktenbarcode}}"class="cell">{{Akte.Aktenbarcode}}</td>
            <td class="cell">{{Akte.user}}</td>
            <td class="cell">{{Akte.Startdatum}}</td>
            <td class="cell">{{Akte.kundennr}}</td>
            <td class="cell">
            <form action="{% url 'aktedelete' %}" method="post">
                   {% csrf_token %}
            <input class="btn btn-primary" type="submit" value="Status anzeigen"/> 
                <input type="hidden" name="aktenbarcode" value="{{Akte.Aktenbarcode}}" />
                <input type="hidden" name="mitglied" value="{{container}}"/>
                <input type="hidden" name="benutzer" value="{{request.user.username}}"/>
                <input type="hidden" name="status" value="{{status}}" />
                {% if status == "O" %}

                <button class="btn btn-primary" data-toggle="modal" data-target="#myModal" type="button"> Akte entfernen</button> 
                                <!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLongTitle" style="color:black">Akte: {{Akte.Aktenbarcode}}</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body" style="color:black">
        Wollen Sie diese Akte unwiderruflich aus dem Container löschen?
      </div>
      <div class="modal-footer">
          <button type="submit" class="btn btn-primary" value="Save" onclick="form_submit()">Ja, ich bin mir sicher</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal" value="Cancel">Nein</button>

      </div>
    </div>
  </div>
</div>
<!-- ModalEnd-->   

                </form></td>
                {% endif %}
        </tr>
        {% endfor %}

        </table>

在我的模态课上:

Akte: {{Akte.Aktenbarcode}}

此变量还始终从第一行而不是单击按钮的行显示“ Akte”。希望您能给我一个解释,也许可以找到一个解决方案。

这是在views.py中:

def aktedelete(request):
    if request.method == 'POST':
        form = AkteDelForm()
        z = AkteForm
        container = request.POST['mitglied']
        closecontainerform = CloseContainerForm
        status = request.POST['status']
        aktenbarcode = request.POST.get('aktenbarcode')  
        akte = Akte.objects.get(Aktenbarcode=aktenbarcode)       
        akte.delete()
        akte_list = Akte.objects.filter(containerId__Containernr=container)
        Anzahl_Akten =Akte.objects.filter(containerId__Containernr=container).count
        return render(
            request,
            'app/aktentabelle.html', 
            {
            'form':form, 
            'title':'About',
            'akte_list':akte_list,
            'anzahl':Anzahl_Akten,
            'container':container,
            'aktenform':z,
            'status':status,
            'closecontainerform': closecontainerform,
            'date':datetime.now().date,
            }
            )

2 个答案:

答案 0 :(得分:1)

您正在为for循环的每次迭代生成模态对话框的标记,但是没有更改id的值。当id应该唯一时,始终设置为myModal

因此,当您单击按钮时,很可能总是会看到与所遇到的第一个id相对应的对话框。

您可以使用Django的forloop.counter变量为每个模式赋予唯一的ID

<div class="modal fade" id="myModal-{{ forloop.counter }}"

,并在从按钮进行引用时执行相同的操作:

<button class="btn btn-primary" data-toggle="modal" data-target="#myModal-{{ forloop.counter }}"

您还必须确保表单提交处理程序onclick="form_submit()"根据循环迭代提交正确的表单。

答案 1 :(得分:0)

如果要删除特定的行,首先必须选择object id。 例如,使用checkboxes或其他任何可以获取id(s)

的东西

然后,您需要在类/函数中调用此id,并且可以编写如下内容:

Akte.objects.filter(id=id).delete()