簡體   English   中英

帶有編輯和刪除按鈕的 Django_tables2。 如何正確操作?

[英]Django_tables2 with Edit and Delete buttons. How to do it properly?

我正在構建一個列出、排序、更新和刪除對象的應用程序。 如何將編輯和/或刪除按鈕正確添加到 django-tables2 表渲染?

使用 Python 版本:3.7 和 Django 版本:2.1.7。

我嘗試了多種方法並在互聯網上搜索,但使用 django-tables2 表渲染來實現它似乎有點復雜。

這是我的代碼。

byauthor.html --table 在此 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 %}

視圖.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)

網址.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"),
]

在這里,我向表模型添加了一列。

表.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 的對象(行)生成一個按鈕,以便我可以通過單擊將其轉發到刪除。

我認為您可以使用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>

應該獲取的參數是“記錄”以訪問在該行中呈現的實際對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM