【问题标题】:Django_tables2 with Edit and Delete buttons. How to do it properly?带有编辑和删除按钮的 Django_tables2。如何正确地做到这一点?
【发布时间】:2019-04-16 10:09:03
【问题描述】:

我正在构建一个可以列出、排序、更新和删除对象的应用程序。 如何正确添加编辑和/或删除按钮到 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 个删除按钮。

但是如果我在 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 的对象(行)生成一个按钮,以便我可以通过单击将其转发到删除。

【问题讨论】:

    标签: python html django django-tables2


    【解决方案1】:

    我认为您可以使用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】:

    我知道我很晚才回答这个问题(2 年后),但它可能会帮助某人,就像它帮助了我一样。 这里的问题在于 forloop 和模板中获取的错误参数。

    <a href="{% url 'main:delete_item' record.pk %}" type="submit" class="btn"><button>{{ item.id }}</button></a>
    

    应获取的参数是“记录”以访问该行中正在呈现的实际对象。

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 2015-07-30
      • 2022-01-18
      • 2021-04-18
      • 2019-12-29
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      相关资源
      最近更新 更多