Проблема удаления первой строки в django_tables2 с использованием TemplateColumn

Относительно недавно познакомился с Django.

Я работаю над проектом, в котором есть существующая таблица django_tables2. Я пытаюсь использовать TemplateColumn для добавления кнопки удаления в таблице. Код, который я сейчас имею, работает для всех строк в таблице (значения удаляются), кроме первой строки в таблице, которая отказывается удаляться. Я могу изменить порядок таблицы, и всегда первая строка не удаляется. Когда я проверяю элементы для новой кнопки удаления, единственное различие, которое я вижу, заключается в том, что в первой строке отсутствует форма:

<form method="post" action="/en/specimen/1/delete/">
...
</form>

Я пытался заставить форму загружаться для первого ряда, но пока не добился этого. Вот что у меня есть на данный момент.

tables.py:

from django_tables2 import tables, TemplateColumn
import django_tables2 as tables

class SpecimenTable(tables.Table):
    SpecimenLabel = tables.LinkColumn('specimen_edit', text=lambda record: record.SpecimenLabel, args=[A('id')])
    Sample = tables.Column(accessor='Sample.SampleName', verbose_name='Sample')
    SampleType = tables.Column(accessor='Sample.SampleType', verbose_name='Sample Type')
    Type = tables.Column(accessor='SpecimenType.name', verbose_name='Specimen Type')
    Medium = tables.Column(accessor='Medium.name', verbose_name='Medium')
    class Meta:
        model = Specimen
        template_name = "django_tables2/bootstrap4.html"
        order_by = 'SpecimenLabel'
        attrs = {"class": "table table-hover"}
        fields = ['SpecimenLabel', 'Sample', 'SampleType', 'Type', 'Medium', 'delete']
    delete=TemplateColumn(template_name='project/tables/specimen_delete.html', verbose_name=_('Delete'), orderable=False)

specimen_delete.html

<!-- Button trigger modal -->
<button type="button" class="btn btn-danger btn-sm " data-toggle="modal" data-target="#{{ record.id }}">Delete</button>
  
<!-- Modal -->

<div class="modal fade" id="{{ record.id }}" tabindex="-1" role="dialog" aria-labelledby="SpecimenDeleteModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <form method="post" action="{% url 'specimen_delete' record.id %}">
                {% csrf_token %}  
                <div class="modal-header">
                    <h4 class="modal-title">Delete Specimen</h4>
                        <!-- <h5 class="modal-title" id="SpecimenDeleteModalLabel">Delete</h5>-->
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <p class="lead">Are you sure you want to delete the specimen <strong>{{ record.SpecimenLabel }}</strong>?</p>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">Close</button>
                    <button type="submit" data-toggle="tooltip" title="Please note that deletion cannot be undone" class="btn btn-danger btn-sm ">Delete Specimen</button>
                </div>
            </form>
        </div>
    </div>
</div>

views.py

def specimen_delete(request, specimen_id):
    specimen = get_object_or_404(Specimen, id=specimen_id)
    print(specimen)
    data = dict()
    if request.method == 'POST':
        try:
            specimen.delete()
            data['form_is_valid'] = True
            return redirect('specimen_list')
        except RestrictedError:
            messages.error(request, "Unable to Delete. Specimen is used within an existing data set.")
            return redirect('specimen_list')
    return JsonResponse(data)

В модальном всплывающем окне отображается метка образца записи, но когда я подтверждаю удаление, запись не удаляется, а страница с таблицей просто перезагружается. Когда я удаляю вторую строку в таблице, строка удаляется и объект печатается благодаря оператору print() в views.py (чего не происходит для первой строки).

Любое руководство о том, как заставить удалить первую строку, будет оценено по достоинству.

Вернуться на верх