Vues génériques d’édition¶
Les vues suivantes sont décrites sur cette page et fournissent une base pour l’édition de contenu :
django.views.generic.edit.FormView
django.views.generic.edit.CreateView
django.views.generic.edit.UpdateView
django.views.generic.edit.DeleteView
Voir aussi
L’infrastructure des messages contient class:~django.contrib.messages.views.SuccessMessageMixin qui facilite la production de messages suite aux soumissions réussies de formulaires.
Note
Certains exemples de cette page partent du principe qu’un modèle Author
a été défini comme dans le fichier myapp/models.py
suivant :
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
¶ Une vue qui affiche un formulaire. En cas d’erreur, le formulaire est ré-affiché avec les erreurs de validation rencontrées ; en cas de succès, l’utilisateur est redirigé vers la nouvelle URL.
Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseFormView
django.views.generic.edit.FormMixin
django.views.generic.edit.ProcessFormView
django.views.generic.base.View
Exemple 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
Exemple myapp/views.py :
from myapp.forms import ContactForm from django.views.generic.edit import FormView class ContactFormView(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)
Exemple myapp/contact.html :
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Send message"> </form>
-
class
django.views.generic.edit.
BaseFormView
¶ Une vue de base pour l’affichage d’un formulaire. Elle n’est pas conçue pour être utilisée directement, mais plutôt comme classe parente pour
django.views.generic.edit.FormView
ou d’autres vues affichant un formulaire.Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :
CreateView
¶
-
class
django.views.generic.edit.
CreateView
¶ Une vue qui affiche un formulaire permettant la création d’objet, et qui ré-affiche le formulaire en cas d’erreurs de validation. En cas de succès, l’objet est enregistré.
Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseCreateView
django.views.generic.edit.ModelFormMixin
django.views.generic.edit.FormMixin
django.views.generic.detail.SingleObjectMixin
django.views.generic.edit.ProcessFormView
django.views.generic.base.View
Attributs
-
template_name_suffix
¶ La page
CreateView
affichée lors d’une requêteGET
utilise'_form'
comme valeur detemplate_name_suffix
. Par exemple, en modifiant cet attribut à'_create_form'
pour une vue créant des objets pour le modèle d’exempleAuthor
, le contenu par défaut detemplate_name
serait'myapp/author_create_form.html'
.
-
object
¶ Lors de l’utilisation de la vue
CreateView
, vous avez accès àself.object
, qui constitue l’objet en cours de création. Si l’objet n’a pas encore été créé, sa valeur seraNone
.
Exemple myapp/views.py :
from django.views.generic.edit import CreateView from myapp.models import Author class AuthorCreateView(CreateView): model = Author fields = ["name"]
Exemple myapp/author_form.html :
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Save"> </form>
-
class
django.views.generic.edit.
BaseCreateView
¶ Une vue de base pour la création d’une instance de nouvel objet. Elle n’est pas conçue pour être utilisée directement, mais plutôt comme classe parente pour
django.views.generic.edit.CreateView
.Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :
Méthodes
-
get
(request, *args, **kwargs)¶ Définit l’instance d’objet actuelle (
self.object
) àNone
.
-
post
(request, *args, **kwargs)¶ Définit l’instance d’objet actuelle (
self.object
) àNone
.
-
UpdateView
¶
-
class
django.views.generic.edit.
UpdateView
¶ Une vue qui affiche un formulaire permettant l’édition d’un objet existant, qui ré-affiche le formulaire en cas d’erreurs de validation et qui enregistre les modifications de l’objet s’il n’y a pas d’erreur. Cette vue utilise un formulaire généré automatiquement à partir de la classe de l’objet de modèle (sauf si une classe de formulaire a été explicitement indiquée).
Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseUpdateView
django.views.generic.edit.ModelFormMixin
django.views.generic.edit.FormMixin
django.views.generic.detail.SingleObjectMixin
django.views.generic.edit.ProcessFormView
django.views.generic.base.View
Attributs
-
template_name_suffix
¶ La page
UpdateView
affichée lors d’une requêteGET
utilise'_form'
comme valeur detemplate_name_suffix
. Par exemple, en modifiant cet attribut à'_update_form'
pour une vue mettant à jour des objets pour le modèle d’exempleAuthor
, le contenu par défaut detemplate_name
serait'myapp/author_update_form.html'
.
-
object
¶ Lors de l’utilisation de la vue
UpdateView
, vous avez accès àself.object
, qui constitue l’objet en cours de mise à jour.
Exemple myapp/views.py :
from django.views.generic.edit import UpdateView from myapp.models import Author class AuthorUpdateView(UpdateView): model = Author fields = ["name"] template_name_suffix = "_update_form"
Exemple myapp/author_update_form.html :
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Update"> </form>
-
class
django.views.generic.edit.
BaseUpdateView
¶ Une vue de base pour la mise à jour d’une instance d’objet existante. Elle n’est pas conçue pour être utilisée directement, mais plutôt comme classe parente pour
django.views.generic.edit.UpdateView
.Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :
Méthodes
-
get
(request, *args, **kwargs)¶ Définit l’instance d’objet actuelle (
self.object
).
-
post
(request, *args, **kwargs)¶ Définit l’instance d’objet actuelle (
self.object
).
-
DeleteView
¶
-
class
django.views.generic.edit.
DeleteView
¶ Une vue qui affiche une page de confirmation et supprime un objet existant. L’objet est supprimé uniquement si la requête est de type
POST
. Si la vue est appelée via une requêteGET
, elle affiche la page de confirmation qui contient un formulaire pour une requêtePOST
vers la même URL.Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseDeleteView
django.views.generic.edit.DeletionMixin
django.views.generic.edit.FormMixin
django.views.generic.base.ContextMixin
django.views.generic.detail.BaseDetailView
django.views.generic.detail.SingleObjectMixin
django.views.generic.base.View
Attributs
-
form_class
¶ Hérité de
BaseDeleteView
. La classe de formulaire qui sera utilisée pour confirmer la requête. Par défaut,django.forms.Form
, ce qui produira un formulaire vide toujours valide.En indiquant votre propre sous-classe de
Form
, vous pouvez ajouter des contraintes supplémentaires, comme par exemple une case à cocher de confirmation.
-
template_name_suffix
¶ La page
DeleteView
affichée lors d’une requêteGET
utilise'_confirm_delete'
comme valeur detemplate_name_suffix
. Par exemple, en modifiant cet attribut à'_check_delete'
pour une vue supprimant des objets pour le modèle d’exempleAuthor
, le contenu par défaut detemplate_name
serait'myapp/author_check_delete.html'
.
Exemple myapp/views.py :
from django.urls import reverse_lazy from django.views.generic.edit import DeleteView from myapp.models import Author class AuthorDeleteView(DeleteView): model = Author success_url = reverse_lazy("author-list")
Exemple myapp/author_confirm_delete.html :
<form method="post">{% csrf_token %} <p>Are you sure you want to delete "{{ object }}"?</p> {{ form }} <input type="submit" value="Confirm"> </form>
-
class
django.views.generic.edit.
BaseDeleteView
¶ Une vue de base pour la suppression d’une instance d’objet. Elle n’est pas conçue pour être utilisée directement, mais plutôt comme classe parente pour
django.views.generic.edit.DeleteView
.Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs des vues suivantes :