Проблема удаления первой строки в 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">×</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 (чего не происходит для первой строки).
Любое руководство о том, как заставить удалить первую строку, будет оценено по достоинству.