Djangos Formulare.Form vs Forms.ModelForm


75

Könnte mir jemand Ähnlichkeiten und Unterschiede von Djangos forms.Form& erklären forms.ModelForm?

Antworten:


119

Formulare, aus forms.Formdenen erstellt wurde, werden von Ihnen manuell konfiguriert. Verwenden Sie diese besser für Formulare, die nicht direkt mit Modellen interagieren. Zum Beispiel ein Kontaktformular oder ein Newsletter-Anmeldeformular, in dem Sie möglicherweise nicht unbedingt mit der Datenbank interagieren.

Wobei ein aus erstelltes Formular forms.ModelFormautomatisch erstellt wird und später von Ihnen optimiert werden kann. Die besten Beispiele stammen aus der hervorragenden Dokumentation auf der Django-Website.

forms.Form:
Dokumentation: Formularobjekte
Beispiel eines normalen Formulars, erstellt mit 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:
Dokumentation: Erstellen von Formularen aus Modellen
Direkt aus den Dokumenten:

Wenn Ihr Formular zum direkten Hinzufügen oder Bearbeiten eines Django-Modells verwendet werden soll, können Sie a verwenden ModelForm, um zu vermeiden, dass Ihre Modellbeschreibung dupliziert wird.

Beispiel eines Modellformulars, erstellt mit forms.Modelform:

from django.forms import ModelForm
from . import models

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

Dieses Formular hat automatisch dieselben Feldtypen wie das ArticleModell, aus dem es erstellt wurde.


Vielen Dank! Darf ich fragen: Kann ich ModelForm in normalen Ansichten rendern, die sich nicht im Administratorbereich befinden? Das Formular kann in normalen Ansichten gerendert und verarbeitet werden, wenn Sie request.POST übergeben, um es zu initialisieren.
Viet

1
Ja. Das ist ihre beabsichtigte Verwendung. Die Administrationsformulare sind ein ganz anderes Tier und fallen nicht in den Rahmen dieser Frage. Gewöhnen Sie sich daran, sich auf die offizielle Dokumentation zu beziehen. Es ist hervorragend und wird Sie fast jedes Mal retten.
Nathanismus

13

Die Ähnlichkeiten bestehen darin, dass beide mithilfe von Widgets Sätze von Formulareingaben generieren und beide vom Browser gesendete Daten validieren. Die Unterschiede bestehen darin, dass ModelForm seine Felddefinition von einer angegebenen Modellklasse erhält und auch Methoden zum Speichern des zugrunde liegenden Modells in der Datenbank enthält.


8

So erweitere ich die integrierte UserCreationForm 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')
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.