如何通过django中的按钮删除记录

时间:2021-01-18 06:35:25

标签: django

我在models.py文件中创建了一个模型公告

class Announcement(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

为了删除公告记录,我创建了以下视图

def AnnouncementDelete(request, pk):
    announcement = get_object_or_404(Announcement, pk=pk)
    if request.method=='POST':
        announcement.delete()
        return redirect('/')
    return render(request, 'classroom/announcement_confirm_delete.html', {'announcement': announcement})    

公告的删除视图(即AnnouncementDelete)有如下url

path("delete/<int:pk>/", view=views.AnnouncementDelete, name="AnnouncementDelete"),

如果我输入

http://127.0.0.1:8000/classroom/delete/3

在浏览器上删除pk = 3的公告

现在我想要一个按钮直接删除我的记录,而不需要在浏览器上输入http://127.0.0.1:8000/classroom/delete/3 我在我的 allannouncement.html 文件中尝试了以下方法

{% extends "classroom/base.html" %} 
{% block content %}
<h1>Announcements</h1>
{% for announcement in announcements %} 
    <!-- starting loop (posts is keyword from view) -->

  <div style="border-style: solid;">
      {% if announcement.teacher.user == request.user %}
        <div>
            <a href="{% url 'classroom:AnnouncementDelete' %}">Delete</a>
            
        </div>
      {% endif %}
      {{ announcement.pk }} 
      <a class="mr-2">Posted by: {{ announcement.teacher }}</a>
      <h2><a class="article-title">{{ announcement.title }}</a></h2>
      <p class="article-content">{{ announcement.content}}</p>
  </div>
        
{% endfor %} 
{% endblock content %}  

但它给出了以下错误

NoReverseMatch at /classroom/allannouncement/
Reverse for 'AnnouncementDelete' with no arguments not found. 1 pattern(s) tried: ['classroom/delete/(?P<pk>[0-9]+)/$']

然后我也尝试使用 url 传递 pk

<a href="{% url 'classroom:AnnouncementDelete' , pk=announcement.pk %}">Delete</a>

但它给出了以下错误

TemplateSyntaxError at /classroom/allannouncement/
Could not parse the remainder: ',' from ','

2 个答案:

答案 0 :(得分:0)

删除常见的#refer this

<a href="{% url 'classroom:AnnouncementDelete' pk=announcement.pk %}">Delete</a>

答案 1 :(得分:0)

添加表单而不是链接。 添加

{% load crispy_forms_tags %}

在你的html文件中然后添加

{% if announcement.teacher.user == request.user %}
        <div>

            <form action="{% url 'classroom:AnnouncementDelete' announcement.id %}" 
             method="post">
                {% csrf_token %}
                <input type="submit" value="Delete">
            </form>
            
        </div>
{% endif %}