Views de edição genérica

As seguintes views são descritas nesta pagina e fornece uma base para edição de conteúdo:

Nota

Alguns dos exemplos nesta página assumem que um model “Author” foi defenido como se segue em myapp/models.py:

from django.db import models
from django.urls import reverse

class Author(models.Model):
    name = models.CharField(max_length=200)

    def get_absolute_url(self):
        return reverse('author-detail', kwargs={'pk': self.pk})

FormView

class django.views.generic.edit.FormView

É uma view que mostra um formulario. Caso tenha um erro da validação é exibido o formulario com os erros para se corrido. Caso o formulario passe pela validação é direcionado para uma nova URL.

Ancestrais (MRO)

Essa “view” herda métodos e atributos das seguintes “views”:

Exemplo myapp/forms.py:

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField()
    message = forms.CharField(widget=forms.Textarea)

    def send_email(self):
        # send email using the self.cleaned_data dictionary
        pass

Exemplo myapp/views.py:

from myapp.forms import ContactForm
from django.views.generic.edit import FormView

class ContactView(FormView):
    template_name = 'contact.html'
    form_class = ContactForm
    success_url = '/thanks/'

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        form.send_email()
        return super().form_valid(form)

Examplo myapp/contact.html:

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Send message">
</form>

CreateView

class django.views.generic.edit.CreateView

Uma view que exibi um formulário para a criação de um objeto, reexibindo o formulário com errors de validações(se houver algum), e salvando o objeto.

Ancestrais (MRO)

Essa “view” herda métodos e atributos das seguintes “views”:

Atributos

template_name_suffix

A página “CreateView” apresentada após uma requisição do tipo “GET”, utiliza um “template_name_suffix” de “_form”. Ao alterar este atributo para '_create_form', por exemplo, para uma view que esteja criando objetos para o exemplo “Author” model, faria com que o template_name padrão fosse 'myapp/author_create_form.html'.

object

Ao utilizar “CreateView”, você tem acesso ao “self.object”, que é o objeto que está sendo criado. Caso o objeto não tenha sido criado ainda, o valor será “None”.

Exemplo myapp/views.py:

from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = ['name']

Exemplo myapp/author_form.html:

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>

UpdateView

class django.views.generic.edit.UpdateView

Uma view que apresenta um form para editar um objeto existente, reapresentando este form com erros de validação (caso exista algum) e salvando as alterações no objeto. Aqui será utilizado um form que foi gerado automaticamente à partir da classe definida no “model” (à menos que seja manualmente especificada uma class que esteja definida em form).

Ancestrais (MRO)

Essa “view” herda métodos e atributos das seguintes “views”:

Atributos

template_name_suffix

A página “UpdateView” que é mostrada após uma requisição “GET”, utiliza um “emplate_name_suffix” de '_form'. Caso este atributo fosse alterado para '_update_form', para uma view que esteja atualizando objetos de um model “Author”, por exemplo, faria com que o template_name fosse 'myapp/author_update_form.html'.

object

Ao utilizar “UpdateView”, você tem acesso ao “self.object”, que é o objeto que está sendo atualizado.

Exemplo myapp/views.py:

from django.views.generic.edit import UpdateView
from myapp.models import Author

class AuthorUpdate(UpdateView):
    model = Author
    fields = ['name']
    template_name_suffix = '_update_form'

Exemplo myapp/author_update_form.html:

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update">
</form>

DeleteView

class django.views.generic.edit.DeleteView

Uma view que apresenta uma página de confirmação e deleta um objeto existente. O dado objeto, será somente deletado se o tipo de request for “POST”. Caso esta mesma view receba um request do tipo “GET”, será apresentada uma página de confirmação que deverá conter um form que será retornada para a mesma URL.

Ancestrais (MRO)

Essa “view” herda métodos e atributos das seguintes “views”:

Atributos

template_name_suffix

The DeleteView page displayed to a GET request uses a template_name_suffix of '_confirm_delete'. For example, changing this attribute to '_check_delete' for a view deleting objects for the example Author model would cause the default template_name to be 'myapp/author_check_delete.html'.

Exemplo myapp/views.py:

from django.urls import reverse_lazy
from django.views.generic.edit import DeleteView
from myapp.models import Author

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('author-list')

Exemplo myapp/author_confirm_delete.html:

<form method="post">{% csrf_token %}
    <p>Are you sure you want to delete "{{ object }}"?</p>
    <input type="submit" value="Confirm">
</form>
Back to Top