97 votes

Les formulaires.Form de Django contre les formulaires.ModèleForm

Quelqu'un pourrait-il m'expliquer s'il vous plaît les similitudes et les différences des formulaires de Django. Formulaire & formulaires.ModèleForme? J'ai utilisé Django pendant 4 jours, alors excusez-moi si je ne connais pas les bases. Merci d'avance!

149voto

jathanism Points 15208

Les formulaires créés à partir d' forms.Form sont configurés manuellement par vous. Il est préférable d'utiliser ces formulaires qui n'interagissent pas directement avec les modèles. Par exemple, un formulaire de contact, ou un abonnement à la newsletter, formulaire, où vous ne pourriez pas nécessairement être en interaction avec la base de données.

Lorsqu'un formulaire créé à partir d' forms.ModelForm sera automatiquement créé et puis peut ensuite être modifié par vous. Les meilleurs exemples sont vraiment de superbes documents fournis sur le site web de Django.

forms.Form:
Documentation: les objets de Formulaire
Exemple d'un formulaire créé avec 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: la Création de formulaires à partir de modèles
Directement à partir de la documentation:

Si votre formulaire est destiné à être utilisé à directement ajouter ou modifier un modèle Django, vous pouvez utiliser un ModelForm afin d'éviter la duplication de votre modèle de description.

Exemple d'un modèle de formulaire créé avec forms.Modelform:

from django.forms import ModelForm

# Create the form class.
class ArticleForm(ModelForm):
    class Meta:
        model = Article

Ce formulaire automatiquement a tous les mêmes types de champs que l' Article modèle, il a été créé à partir.

15voto

Les similitudes sont qu'ils génèrent des ensembles d'entrées de formulaire à l'aide de widgets et valident les données envoyées par le navigateur. Les différences sont que ModelForm tire sa définition de champ d'une classe de modèle spécifiée et qu'il dispose également de méthodes traitant de la sauvegarde du modèle sous-jacent dans la base de données.

10voto

Stephen J. Fuhry Points 3549

Voici comment j'étends UserCreationForm intégré myapp / forms.py :

 from django import forms
from django.contrib.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')
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X