在Django中创建删除按钮时出现问题

时间:2020-07-28 19:13:11

标签: python django

我正在尝试建立删除按钮,目前卡住了。我是django的新手,需要帮助。谢谢

This is my models.py:-

    from django.db import models
    from django.contrib.auth import get_user_model
    from django.db import models
    from django.urls import reverse
    # Create your models here.
    
    
    class simpleList(models.Model):
        title = models.CharField(max_length=250)
    
        def __str__(self):
            return self.title

这是我的views.py:-

from django.shortcuts import render, get_object_or_404
from .models import simpleList
from django.views.generic import ListView, DeleteView
from django.urls import reverse_lazy
from django.contrib.messages.views import SuccessMessageMixin
# Create your views here.


class ListListView(ListView):
    model = simpleList
    template_name = 'list_list.html'


class DeleteList(SuccessMessageMixin, DeleteView):
    model = simpleList
    success_url = '/'
    success_message = "deleted..."

    def delete(self, request, *args, **kwargs):
        self.object = self.get_object()
        name = self.object.title
        # name will be change according to your need
        request.session['title'] = title
        message = request.session['title'] + ' deleted successfully'
        messages.success(self.request, message)
        return super(DeleteView, self).delete(request, *args, **kwargs)

这是我的urls.py:-

from django.urls import path
from .views import ListListView, DeleteList
from django.conf.urls import url
from . import views


urlpatterns = [
    path('', ListListView.as_view(), name='list_list'),
    path('<int:pk>/', DeleteList.as_view(), name='delete_view'),
]

这是我的home.html:-

{% extends 'base.html' %}

{% block title %}Home{% endblock title %}

{% block content %}
<div>
    {% if user.is_authenticated %}
    <button type="button" class="btn btn-info"><a style="color: white;" href="{% url 'list_list' %}">Continue to
            slist</a></button>
    {% endif %}
</div>
{% endblock content %}

这是我的list_list.html,目前尚未完成:-

{% extends 'base.html' %}

{% block title %}sList{% endblock title %}

{% block content %}
<h2>simpleList</h2>
{% for simpleList in object_list %}
<div>
    <h3>{{ simpleList.title }}</h3>
    <div>
        <form action="{% url 'delete_view' pk=part.pk %}">{% csrf_token %}
            X<input class="btn btn-default btn-danger" type="submit" value="Delete" />
        </form>
    </div>
</div>
{% endfor %}

{% endblock content %}

我从Django得到的错误是:-

/ list /处的NoReverseMatch 找不到带有关键字参数'{'pk':''}'的'delete_view'。尝试了1个模式:['列表/(?P [0-9] +)/ $']

10  <body>
11      <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
12          <a class="navbar-brand" href="{% url 'home' %}">simpleList</a>
13          <div class="collapse navbar-collapse" id="navbarColor01"></div>
14          {% if user.is_authenticated %}
15          <button type="button" class="btn btn-secondary">Hi, {{ user.username }}</button>
16          <button type="button" class="btn btn-info"><a style="color:white;" href="{% url 'logout' %}">Logout</a></button>

1 个答案:

答案 0 :(得分:2)

您需要发出POST请求以删除对象。此外,对象的名称为simpleList,而不是part,因此该表单应重写为:

<form method="post" action="{% url 'delete_view' pk=simpleList.pk %}">
    {% csrf_token %}
    <input class="btn btn-default btn-danger" type="submit" value="Delete" />
</form>

使用<int:pk>/作为路径模式不是问题。例如,最好使用<int:pk>/delete,因为<int:pk>/通常用于显示具有该主键的对象的 details

urlpatterns = [
    path('', ListListView.as_view(), name='list_list'),
    path('<int:pk>/delete/', DeleteList.as_view(), name='delete_view'),
]