Les formes de Django.Form vs forms.ModelForm

Quelqu’un pourrait-il m’expliquer les similitudes et les différences entre les forms.Form de Django. forms.Form et forms.ModelForm .

Les formulaires créés à partir de forms.Form sont configurés manuellement par vous. Il est préférable de les utiliser pour les formulaires qui n’interagissent pas directement avec les modèles. Par exemple, un formulaire de contact ou un formulaire d’inscription à la lettre d’information, dans lequel vous n’êtes pas nécessairement en interaction avec la firebase database.

Où comme un formulaire créé à partir de forms.ModelForm sera automatiquement créé et peut ensuite être modifié par vous. Les meilleurs exemples proviennent de la superbe documentation fournie sur le site Web de Django.

forms.Form :
Documentation: Objets de formulaire
Exemple d’une forme normale créée avec des forms.Form :

 from django import forms class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField() sender = forms.EmailField() cc_myself = forms.BooleanField(required=False) 

forms.ModelForm :
Documentation: Création de formulaires à partir de modèles
Directement des documents:

Si votre formulaire doit être utilisé pour append ou modifier directement un modèle Django, vous pouvez utiliser un ModelForm pour éviter de dupliquer la description de votre modèle.

Exemple de formulaire de modèle créé avec des forms.Modelform :

 from django.forms import ModelForm from . import models # Create the form class. class ArticleForm(ModelForm): class Meta: model = models.Article 

Ce formulaire a automatiquement tous les mêmes types de champs que le modèle d’ Article duquel il a été créé.

Les similitudes sont qu’elles génèrent des ensembles d’entrées de formulaire à l’aide de widgets et que les deux valident les données envoyées par le navigateur. Les différences sont que ModelForm obtient sa définition de champ à partir d’une classe de modèle spécifiée et dispose également de méthodes qui permettent de sauvegarder le modèle sous-jacent dans la firebase database.

Voici comment j’extensionne UserCreationForm myapp / forms.py :

 from django import forms from django.consortingb.auth.forms import UserCreationForm class RegisterForm(UserCreationForm): first_name = forms.CharField(max_length=30) last_name = forms.CharField(max_length=30) email = forms.CharField(max_length=75) class Meta(UserCreationForm.Meta): fields = ('username','first_name','last_name', 'email')