Удалить конкретную строку в Django - PullRequest
0 голосов
/ 24 сентября 2018

Я довольно новичок в Django и HTML и хочу создать портал для клиентов, где клиенты смогут управлять своими документами.Моя проблема в том, что у каждой строки есть своя собственная кнопка удаления, но какую бы кнопку я ни нажал, она всегда удаляет верхнюю строку, а не кнопку в строке, которую я нажала.Я думаю, что вам нужно только увидеть шаблон, чтобы увидеть ошибку, потому что он удаляет «Акте», но не тот, который нужен.

Шаблон:

<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 голосов
/ 24 сентября 2018

Вы генерируете разметку для модального диалога для каждой итерации цикла for, однако вы не изменяете значение id.id всегда установлен на myModal, когда он должен быть уникальным.

Таким образом, когда вы нажимаете кнопку, вполне вероятно, что вы всегда будете видеть диалог, соответствующий первому id, с которым вы столкнулись.

Вы можете использовать переменную Django forloop.counter, чтобы дать каждому модалу уникальный идентификатор

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

и сделать то же самое при ссылке с кнопки:

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

YouТакже необходимо убедиться, что обработчик отправки формы onclick="form_submit()" отправляет правильную форму в зависимости от итерации цикла.

0 голосов
/ 24 сентября 2018

Если вы хотите удалить определенную строку, сначала вы должны выбрать object id.Например, с checkboxes или чем-то еще, что позволяет получить id(s)

Затем вам нужно вызвать это id в вашем классе / функции, и вы можете написать что-то вроде этого:

Akte.objects.filter(id=id).delete()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...