Как удалить запись с помощью кнопки в django

#django

#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] )/

затем я также попытался передать pk с URL, например

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

Но он выдает следующую ошибку

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

Комментарии:

1. вы используете метод post, не забудьте включить кнопку в тип формы post или удалить проверку для метода post в представлении announcementdelete

Ответ №1:

вместо ссылки добавьте форму. Добавить

 {% 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 %} 
 

Ответ №2:

Удалить общее #обратитесь к этому

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

]
затем я также попытался передать pk с URL, например


Но он выдает следующую ошибку


Комментарии:

1. вы используете метод post, не забудьте включить кнопку в тип формы post или удалить проверку для метода post в представлении announcementdelete

Ответ №1:

вместо ссылки добавьте форму. Добавить


в вашем HTML-файле, а затем добавьте


Ответ №2:

Удалить общее #обратитесь к этому