Formulário de exclusão do Django

Resumo : neste tutorial, você aprenderá como criar um formulário de exclusão do Django para excluir uma postagem.

Este tutorial começa onde o tutorial de criação  do formulário de edição do Django parou.

Criaremos um formulário que exclui uma postagem pelo seu id.

Criando um padrão de URL

Adicione um padrão de URL à lista de padrões no urls.pyaplicativo blog:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='posts'),
    path('post/create', views.create_post, name='post-create'),
    path('post/edit/<int:id>/', views.edit_post, name='post-edit'),
    path('post/delete/<int:id>/', views.delete_post, name='post-delete'),
    path('about/', views.about, name='about'),
]
Linguagem de código:  Python  ( python )

O URL de exclusão aceita um id como um número inteiro que especifica o id da postagem a ser excluída. Ao abrir o URL:

http://127.0.0.1/post/delete/1/Linguagem de código:  Python  ( python )

Django executará a delete_post()função no arquivo views.py.

Definindo uma função de visualização

Defina uma delete_post()função no views.pyaplicativo blog:

from django.shortcuts import render,redirect, get_object_or_404
from django.contrib import messages
from .models import Post
from .forms import PostForm


def delete_post(request, id):
    post = get_object_or_404(Post, pk=id)
    context = {'post': post}    
    
    if request.method == 'GET':
        return render(request, 'blog/post_confirm_delete.html',context)
    elif request.method == 'POST':
        post.delete()
        messages.success(request,  'The post has been deleted successfully.')
        return redirect('posts')

# ...Linguagem de código:  Python  ( python )

Como funciona.

  • Primeiro, obtenha a postagem por id usando get_object_or_404()e renderize o post_confirm_delete.htmlmodelo. Se a postagem não existir, redireciona para uma página 404.
  • Segundo, renderize o post_confirm_delete.htmlmodelo se a solicitação HTTP for GET.
  • Terceiro, exclua a postagem, crie uma mensagem flash e redirecione para a lista de postagens se a solicitação HTTP for POST.

Criando um modelo

Crie o post_confirm_delete.htmlmodelo no templates/blogdiretório do blogaplicativo. Este modelo estende o base.htmlmodelo do projeto:

{% extends 'base.html' %} 

{% block content %}
<h2>Delete Post</h2>

<form method="POST">
  {% csrf_token %}
  <p>Are you sure that you want to delete the post "{{post.title}}"?</p>
  <div>
    <button type="submit">Yes, Delete</button>
    <a href="{% url 'posts' %}">Cancel</a>
  </div>
</form>

{% endblock content %}Linguagem de código:  HTML, XML  ( xml )

Este modelo contém um formulário que possui dois botões. Se você clicar no botão enviar ( Yes, Delete), uma solicitação HTTP POST será enviada para o URL especificado. Caso contrário, navegará até o URL da lista de postagens.

Adicionando o link de exclusão à postagem

Adicione o link de exclusão a cada postagem no home.htmlmodelo:

{% extends 'base.html' %}
	
{% block content %}
<h1>My Posts</h1>
	{% for post in posts %}
		<h2>{{ post.title }}</h2>
		<small>Published on {{ post.published_at | date:"M d, Y" }} by {{ post.author | title}}</small>
		<p>{{ post.content }}</p>
		<p>
			<a href="{% url 'post-edit' post.id %}">Edit</a> 
			<a href="{% url 'post-delete' post.id%}">Delete</a>
		</p>
	{% endfor %}
{% endblock content %}
Linguagem de código:  HTML, XML  ( xml )

Se você abrir o URL http://127.0.0.1/, verá o link de exclusão que aparece ao lado do link de edição:

Se você clicar no link de exclusão, navegará para o URL de exclusão. Por exemplo, o seguinte mostra a página ao excluir a postagem com o título "Flat is better than nested***":

Depois de clicar no Yes, Deletebotão, o Django executará a delete_post()função que exclui o post e redireciona você para a lista de posts:

Baixe o código fonte do Projeto Django

Resumo

  • Use o delete()método para excluir um modelo do banco de dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *