Allgemeine Ansichten und Vordrucke sind nicht ausschließlich Konzepte; Generische Sichten werden gemacht, um die Geschäftslogik einer bestimmten Funktion zu umfassen, während ModelForms eine Form, Validierung/Datenbereinigungslogik und CRUD-Funktionalität aus der Logik des Modells erstellen.
Im folgenden Beispiel (von docs) erstellt UpdateView (eine generische Ansicht, die als Teil von Django bereitgestellt wird) ein Modellformular aus einer einzelnen Modellinstanz. Durch CBV-Konventionen wird der Primärschlüssel der zu aktualisierenden Instanz als das erste von der URL bereitgestellte Positionsargument erwartet.
In diesem Fall wird automatisch eine ModelForm generiert. Wenn eine feinere Steuerung erforderlich ist, können Sie Ihr eigenes ModelForm definieren und es dem CBV zur Verfügung stellen. Hoffentlich hilft dies, Ihre Verwirrung zu klären.
Beispiel myapp/views.py:
from django.views.generic.edit import UpdateView
from myapp.models import Author
from django import forms
class MyModelForm(forms.ModelForm):
model = Author
fields = ['name', 'city', ...]
class AuthorUpdate(UpdateView):
model = Author
form = MyModelForm
template_name_suffix = '_update_form'
Beispiel myapp/author_update_form.html:
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update" />
</form>
Beispiel myapp/urls.py
from django.conf.urls import *
from myapp.views import AuthorUpdate
urlpatterns = patterns('',
url('^update_author/(?P<pk>[\w-]+)$', AuthorUpdate.as_view(), name='update_author'),
)
Danke. So können wir Modellformulare an generische Ansichten übergeben. – Shri
Wie kann ich Felder in Templates anpassen? Wie beim benutzerdefinierten Styling. – Shri
Siehe das Update zum Übergeben benutzerdefinierter ModelForms an ein CBV. Felder über die Django-Vorlagensprache anpassen. Das ist ein großes Thema, aber es gibt viele gute Tutorials! Durchlaufen Sie die Felder für ein Formular {% für das Feld in der Form%}