进展如何?我正在学习用Django编程。目前,我正在构建一个使用表单更新引用表的简单应用。
现在,我尝试在表格的每一行中添加一个删除按钮,但是,除了尝试了许多解决方案之外,我还没有找到能正常工作的解决方案。
在我的代码下面:
网址
from django.urls import path
from app import views
urlpatterns = [
path('', views.homepage, name='homepage'),
#path('algo', views.PersonListView.as_view(), name='algo'),
]
表格
from django import forms
from .models import Income
class IncomeModelForm(forms.ModelForm):
class Meta:
model = Income
fields = "__all__"
表格
import django_tables2 as tables
from .models import Income
class PersonTable(tables.Table):
class Meta:
model = Income
template_name = "django_tables2/bootstrap.html"
观看次数
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)
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>
当您在表中显示记录时,您需要使用“删除表单”按钮添加额外的表数据。例如:
<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>
现在,在您的views.py中添加DELETE部分并删除记录:
if request.method == 'DELETE':
Person.objects.get(pk=request.DELETE['delete-id']).delete()
您正在使用django_tables2,您只需在您的表中添加此代码即可。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'}
})