AttributeError at /delete/1/ Generic detail view DeleteTodo必



我从Django开始,我想创建简单的项目来测试我的技能。首先是简单的待办事项列表。我在尝试在我的项目上创建"删除任务"功能时发现了一个问题。

views.py


from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from .models import Task
from .forms import TaskForm
from django.views.generic import DeleteView

def index(request):
return render(request, 'todoxd_app/index.html')
def todo(request):
objekt = Task.objects.all()
context = {'objekt': objekt}
return render(request, 'todoxd_app/todo.html', context)
def new_todo(request):
if request.method != 'POST':
form = TaskForm()
else:
form = TaskForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('todoxd_app/new_todo')
context = {'form': form}
return render(request, 'todoxd_app/new_todo.html', context)
class DeleteTodo(DeleteView):
model = Task
template_name = 'registration/delete_todo.html'
urls.py 

from django.urls import path, include
from .views import DeleteTodo
from . import views


app_name = 'todoxd_app'

urlpatterns = [
path('', views.index, name='index'),
path('todo/', views.todo, name='todo'),
path('new_todo/', views.new_todo, name='new_todo'),
path('delete/<post_pk>/', DeleteTodo.as_view() ,name='delete_todo'),
]

delete_todo.html

<>之前标题{%扩展'todoxd_app/base.html' %}{%块内容%}{% csrf_token %}删除任务{% endblock内容%}以前

from django.db import models

class Task(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
date_added = models.DateField(auto_now_add=True)
date_end_of_task = models.CharField(max_length=20)
progress = models.BooleanField()

def __str__(self):
return self.name

我很感激你的帮助):

要删除任务你需要指定django你要删除哪个任务要调用id或slug字段只对该任务是唯一的然后你可以删除任务这里我使用id

def DeleteTodo(request, id):
task = Task.objects.filter(id=id)
task.delete()
return render(request, 'registration/delete_todo.html')

在你的HTML中的href标签,你想让用户删除该任务

<a href="{% url 'todoxd_app:delete_todo' id=task.id %}">Delete It</a>

和url的最后一个

path('<int:id>/delete', views.DeleteTodo, name='delete_todo'),

现在你可以删除它

默认情况下,详细视图(如DeleteView)将在url中查找主键,其中包含docs中解释的kwargpk。. 因此,如果您想在视图中支持使用post_pk,请将其设置为pk_url_kwarg中的值:

class DeleteTodo(DeleteView):
model = Task
template_name = 'registration/delete_todo.html'
pk_url_kwarg = 'post_pk'

或者一个更简单的方法来解决这个问题是改变你的url配置使用pk代替:

path('delete/<int:pk>/', DeleteTodo.as_view(), name='delete_todo'),

最新更新