Könnte mir jemand Ähnlichkeiten und Unterschiede von Djangos forms.Form
& erklären forms.ModelForm
?
Antworten:
Formulare, aus forms.Form
denen 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.ModelForm
automatisch 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 Article
Modell, aus dem es erstellt wurde.
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.
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')