Я создаю приложение, которое перечисляет, сортирует, обновляет и удаляет объекты.
Как правильно добавить кнопки редактирования и / или удаления в рендер таблицы django-tables2?
Версия Python: 3.7 и версия Django: 2.1.7.
Я пробовал несколько способов и искал в интернете, но кажется немного сложным реализовать его с помощью рендеринга таблиц django-tables2.
Вот мой код.
byauthor.html - таблица отображается в этом html
{% extends "main/base.html" %}
{% block content %}
{% load render_table from django_tables2 %}
<h3>Logged in: {{user.first_name}} {{user.last_name}} </h3>
<p>{{ time|date:"d.m.Y." }}</p>
{% render_table table %}
{% endblock %}
views.py
def byauthor(request):
current_account = request.user
items = Cashier.objects.filter(user__exact=current_account).filter(cashier_published__date=datetime.today())
table = CashierTable(Cashier.objects.filter(user__exact=current_account).filter(cashier_published__date=datetime.today()))
RequestConfig(request).configure(table)
return render(request, 'main/byauthor.html', {'table': table, 'time': datetime.now(), 'items': items})
def delete_item(request, pk):
Cashier.objects.filter(id=pk).delete()
items = Cashier.objects.all()
context = {
'items': items
}
return render(request, 'main/delete_confirmation.html', context)
urls.py
from django.urls import path
from . import views
app_name = 'main' # here for namespacing of urls.
urlpatterns = [
path("", views.homepage, name="homepage"),
path("byauthor", views.byauthor, name="byauthor"),
path('byauthor/delete_item/<int:pk>', views.delete_item, name="delete_item"),
]
Здесь я добавил столбец к модели таблицы.
tables.py
class CashierTable(tables.Table):
delete = tables.TemplateColumn(template_name='main/delete_template.html', orderable=False)
class Meta:
model = Cashier
order_by = '-id'
А вот основная проблема .
delete_template.html
{% for item in items %}
<a href="{% url 'main:delete_item' item.pk %}" type="submit" class="btn"><button>{{ item.id }}</button></a>
{% endfor %}
Когда моя таблица обрабатывается, она явно перебирает объекты, для которых генерирует новую строку, и это нормально. Но когда я отображаю его с помощью delete_template.html, представляющего кнопку для удаления определенного объекта, он снова выполняет итерации по объектам и генерирует кнопки для всех объектов в каждой строке.
Так что, если у меня есть 10 объектов, он генерирует 10 кнопок удаления для каждой строки.
Но если я удаляю этот цикл {% for%} в delete_template.html , это выдает эту ошибку:
NoReverseMatch at /byauthor
Reverse for 'delete_item' with arguments '('',)' not found. 1 pattern(s) tried: ['byauthor/delete_item/(?P<pk>[0-9]+)$']
Любая помощь или советы будут оценены.
Функциональность хорошая, работает. Удаляет объект с этим идентификатором.
Моя цель - сгенерировать одну кнопку для каждого объекта (строки), в котором есть идентификатор объекта, чтобы я мог переслать его для удаления, щелкнув по нему.