如何在表格的每一行中添加删除按钮? [英] how to add delete button in each row of my table?

查看:78
本文介绍了如何在表格的每一行中添加删除按钮?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

进展如何?我正在学习在 Django 中编程.目前,我正在构建一个简单的应用程序,该应用程序使用表单更新引用的表.

现在我尝试在表格的每一行添加一个删除按钮,但是除了我尝试了很多解决方案之外,我没有找到一个可以正常工作的解决方案.

在我的代码下面:

网址

<预><代码>从 django.urls 导入路径从应用导入视图app_name = 'main'网址模式 = [path('', views.homepage, name='homepage'),path('delete_item/', views.delete_item, name="delete_item"),]

表格

from django 导入表单从 .models 导入收入类 IncomeModelForm(forms.ModelForm):元类:模型 = 收入字段 = "__all__"

表格

导入 django_tables2 作为表格从 django_tables2.utils 导入 A从 .models 导入收入类 PersonTable(tables.Table):delete = tables.LinkColumn('main:delete_item', args=[A('delete-id')], attrs={'a': {'class': 'btn'}})元类:模型 = 收入template_name = "django_tables2/bootstrap.html"

观看次数

from django.shortcuts 导入渲染从 django.http 导入 HttpResponse从 django.views.generic 导入 ListView从 .models 导入收入从 .tables 导入 PersonTable从 .forms 导入 IncomeModelForm定义主页(请求):table = PersonTable(Income.objects.all())如果 request.method == 'POST':form = IncomeModelForm(request.POST)如果 form.is_valid():打印(Il formèvalido")new_input = form.save()其他:表单 = IncomeModelForm()上下文= {形式":形式,表":表 }返回渲染(请求,app/base.html",上下文)def delete_item(请求,pk):Income.objects.filter(id=pk).delete()items = Income.objects.all()上下文 = {物品":物品}返回渲染(请求,'app/base.html',上下文)

html

{% 加载静态 %}{% 从 django_tables2 % 加载 render_table}<!doctype html><html lang="it"><头><!-- 必需的元标记--><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit=no"><title>你好,世界!</title><div class="容器"><form class="" action="" method="post">{% csrf_token %}{{形式|酥脆}}<input type="submit" class="btn btn-danger" value="INVIA"​​></表单>

<br><br><div class="容器">{% 渲染表 %}</表单>

</html>

我的表显示列删除"但没有按钮,只有-".为什么?我的错误在哪里?

解决方案

当您在表格中显示记录时,您需要使用删除表格按钮添加额外的表格数据.例如:

{% for item in items%}<tr><td>{{item.id}}</td><td>{{item.name}}</td><td><表单方法=删除"><input type="hidden" value="{{item.id}}" name="delete-id"><input type="Submit">删除</button></表单></td></tr>{% 结束}

<块引用>

现在,在您的 views.py 中添加 DELETE 部分并删除记录:

if request.method == 'DELETE':Person.objects.get(pk=request.DELETE['delete-id']).delete()

<块引用>

您正在使用 django_tables2,您可以简单地将此代码添加到您的 tables.py 中

from django_tables2.utils import A #alias for Accessor类 PersonTable(tables.Table):delete = tables.LinkColumn('main:delete_item', args=[A('delete-id')], attrs={'a':{'class':'btn'}})

How is going? I'm learning to programming in django. For the moment I'm building a simple app that utilizing a form update the referenced table.

Now I'm try to add a delete button in each row of my table but, beside I have tried a lot of solutions, I didn't find one that works correctly.

Below my code:

urls


from django.urls import path
from app import views

app_name = 'main'

urlpatterns = [
    path('', views.homepage, name='homepage'),
    path('delete_item/<int:pk>', views.delete_item, name="delete_item"),
]

forms

from django import forms
from .models import Income

class IncomeModelForm(forms.ModelForm):

    class Meta:
        model = Income
        fields = "__all__"

tables

import django_tables2 as tables
from django_tables2.utils import A
from .models import Income

class PersonTable(tables.Table):
    delete = tables.LinkColumn('main:delete_item', args=[A('delete-id')], attrs={'a': {'class': 'btn'}})
    class Meta:
        model = Income
        template_name = "django_tables2/bootstrap.html"

views

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import ListView
from .models import Income
from .tables import PersonTable
from .forms import IncomeModelForm

def homepage(request):
    table = PersonTable(Income.objects.all())

    if request.method == 'POST':
         form = IncomeModelForm(request.POST)
         if form.is_valid():
             print("Il form è valido")
             new_input = form.save()

    else :
        form = IncomeModelForm()

    context= {"form": form,
            "table":table }
    return render(request, "app/base.html", context)


def delete_item(request, pk):

    Income.objects.filter(id=pk).delete()
    items = Income.objects.all()
    context = {
    'items': items
    }
    return render(request, 'app/base.html', context)

html

{% load static %}
{% load render_table from django_tables2 %}
<!doctype html>
<html lang="it">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <title>Hello, world!</title>
  </head>
  <div class="container">
        <form class="" action="" method="post">
            {% csrf_token %}
            {{form|crispy}}
            <input type="submit" class="btn btn-danger" value="INVIA">
        </form>
</div>

<br>
<br>

<div class="container">
    {% render_table table %}
</form>
</div>

  </body>
</html>

My table disply the column "Delete" but no buttoms, only a "-". Why? Where is my error?

解决方案

When you display the record in a table you need to add an extra tabledata with delete form button. Eg:

<table>

{% for item in items%}

<tr>
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>
    <form method="delete">
        <input type="hidden" value="{{item.id}}" name="delete-id">
        <input type="Submit">Delete</button>
    </form>
</td>
</tr>

{% endfor}
</table>

Now, in your views.py add DELETE section and delete the record:

if request.method == 'DELETE':
        Person.objects.get(pk=request.DELETE['delete-id']).delete()

You are using django_tables2, you can simply add this code in your tables.py

from django_tables2.utils import A  # alias for Accessor
class PersonTable(tables.Table):
    delete = tables.LinkColumn('main:delete_item', args=[A('delete-id')], attrs={
    'a': {'class': 'btn'}
    })

这篇关于如何在表格的每一行中添加删除按钮?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆