Django_tables2 带有编辑和删除按钮。如何正确地做到这一点?
Django_tables2 with Edit and Delete buttons. How to do it properly?
我正在构建一个可以列出、排序、更新和删除对象的应用程序。
如何正确地将编辑 and/or 删除按钮添加到 django-tables2 table 渲染?
使用Python版本:3.7和Django版本:2.1.7。
我尝试了多种方法并在互联网上进行了搜索,但是使用django-tables2 table渲染实现它似乎有点复杂。
这是我的代码。
byauthor.html --table在这个html[=17=中渲染]
{% 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"),
]
这里我在 table 模型中添加了一列。
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 %}
当我的 table 渲染出来时,它显然会遍历生成新行的对象,这很好。但是当我用这个代表删除特定对象的按钮的 delete_template.html 渲染它时,它会再次遍历对象并为每行中的所有对象生成按钮。
因此,如果我有 10 个对象,它会为每一行生成 10 个删除按钮。
但是如果我在 delete_template.html 中删除这个 {% for %} 循环,它会产生这个错误:
NoReverseMatch at /byauthor
Reverse for 'delete_item' with arguments '('',)' not found. 1 pattern(s) tried: ['byauthor/delete_item/(?P<pk>[0-9]+)$']
如有任何帮助或提示,我们将不胜感激。
功能不错,可以用。删除具有该 ID 的对象。
我的目标是为其中包含对象 ID 的每个对象(行)生成一个按钮,以便我可以通过单击将其转发到删除。
我认为您可以使用 LinkColumn 添加删除按钮。你可以这样做:
from django_tables2.utils import A # alias for Accessor
class CashierTable(tables.Table):
delete = = tables.LinkColumn('main:delete_item', args=[A('pk')], attrs={
'a': {'class': 'btn'}
})
我知道我很晚才回答这个问题(2 年后),但它可能对某些人有所帮助,就像它帮助了我一样。
这里的问题是 forloop 和模板中获取的错误参数。
<a href="{% url 'main:delete_item' record.pk %}" type="submit" class="btn"><button>{{ item.id }}</button></a>
应该获取的参数是“record”以访问在该行中呈现的实际对象。
我正在构建一个可以列出、排序、更新和删除对象的应用程序。 如何正确地将编辑 and/or 删除按钮添加到 django-tables2 table 渲染?
使用Python版本:3.7和Django版本:2.1.7。
我尝试了多种方法并在互联网上进行了搜索,但是使用django-tables2 table渲染实现它似乎有点复杂。
这是我的代码。
byauthor.html --table在这个html[=17=中渲染]
{% 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"),
]
这里我在 table 模型中添加了一列。
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 %}
当我的 table 渲染出来时,它显然会遍历生成新行的对象,这很好。但是当我用这个代表删除特定对象的按钮的 delete_template.html 渲染它时,它会再次遍历对象并为每行中的所有对象生成按钮。 因此,如果我有 10 个对象,它会为每一行生成 10 个删除按钮。
但是如果我在 delete_template.html 中删除这个 {% for %} 循环,它会产生这个错误:
NoReverseMatch at /byauthor
Reverse for 'delete_item' with arguments '('',)' not found. 1 pattern(s) tried: ['byauthor/delete_item/(?P<pk>[0-9]+)$']
如有任何帮助或提示,我们将不胜感激。
功能不错,可以用。删除具有该 ID 的对象。
我的目标是为其中包含对象 ID 的每个对象(行)生成一个按钮,以便我可以通过单击将其转发到删除。
我认为您可以使用 LinkColumn 添加删除按钮。你可以这样做:
from django_tables2.utils import A # alias for Accessor
class CashierTable(tables.Table):
delete = = tables.LinkColumn('main:delete_item', args=[A('pk')], attrs={
'a': {'class': 'btn'}
})
我知道我很晚才回答这个问题(2 年后),但它可能对某些人有所帮助,就像它帮助了我一样。 这里的问题是 forloop 和模板中获取的错误参数。
<a href="{% url 'main:delete_item' record.pk %}" type="submit" class="btn"><button>{{ item.id }}</button></a>
应该获取的参数是“record”以访问在该行中呈现的实际对象。