Wie verwende ich CreateView mit einem ModelForm
Bekomme ich eine Fehlermeldung in meiner Klasse AuthorCreateForm, wenn ich meine form.
NameError
selbst ist nicht definiert
Wie benutze ich eine wie CreateForm im?
Habe ich eine Klasse in meiner Author.py Datei
from django.views.generic import TemplateView, ListView, CreateView
from books.models import Author, Publisher, Book
from books.forms import AuthorForm
class AuthorCreateView(CreateView):
objAuthorForm = AuthorForm(self.request.POST)
if(objAuthorForm.save()):
success = "Form saved!"
else:
error = "There was an error!"
und ich habe ein html-template, welches unterwirft /Autor/Erstellen
und ich habe folgende Zeile in meiner urls.py
('^authors/create/$', Author.AuthorCreateView.as_view()),
Ich render das Formular unter dieser URL
('^authors/new/$', TemplateView.as_view(template_name="author_new.html")),
Ich find das Klasse basierten Blick verwirrend, hat jemand eine gute Anleitung, wie man verwenden es für CRUD-Operationen?
Dank
InformationsquelleAutor der Frage iJK | 2011-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie haben, ist ein python-Fehler --
self
ist nicht definiert.self
ist in der Regel, was bezieht sich auf die Instanz der Klasse selbst auf Klassenmethoden.Na ja, ich bin damit einverstanden, es ist nagelneuen und nicht wie dokumentiert. Ich denke, auf der Suche an der Quelle ist absolut Schlüssel zu diesem Zeitpunkt.
Wohl zu fühlen mit class based views, ich würde anfangen, indem bilden von Unterklassen
django.views.generic.base.View
die setzt nur ein paar Methoden, nämlich der Versuch zum aufrufen einer Funktion auf der Klasse basiert auf dem request-Methode (post, get, head, look at source).Zum Beispiel, hier ist der erste Schritt, Sie zu ersetzen-view-Funktionen mit dem neuen view-Klassen:
Zurück zu Ihrer konkreten Frage:
Alle
TemplateView.as_view()
tut, ist das Rendern der Vorlage -CreateView
ist eine Kombination von mehreren anderen Klassen, GriffModelForms
- und template-rendering (TemplateView
).So, für ein sehr einfaches Beispiel, Blick auf die docs für welche Klasse
mixins
verwendet werdenCreateView
.Sehen wir es implementiert
TemplateResponseMixin
ModelFormMixin
undProcessFormView
jede enthält eine Liste der Methoden für diese Klassen.Die meisten grundlegenden CreateView
Auf der grundlegendsten Ebene, bieten
CreateView
'sModelFormMixin
mit dem Modell oder custom ModelForm Klasse wie hier dokumentiert.Ihre
CreateView
- Klasse würde wie folgt AussehenMit diesen 3-Kern-Attribute festlegen, nennen es in Ihren URLs.
Rendern der Seite und Sie werden sehen, Ihre ModelForm an die Vorlage als
form
Handhabung des Formular-Validierung (wobei inrequest.POST
/re-Rendern, wenn es ungültig ist), sowie den Aufrufform.save()
und Weiterleitung zusuccess_url
.Start überschreiben der Klasse Methoden
Anpassen, Verhalten, starten Sie die Methoden überschreiben dokumentiert, für die
mixins
.Denken Sie daran, dass Sie einfach brauchen, um wieder eine
HttpResponse
von einer dieser Methoden nur wie eine normale view-Funktion.Beispiel überschreiben
form_invalid
dokumentiert inModelFormMixin
:Diese pro-Methode überschreiben beginnt immer extrem nützlich, da Ihre Formen wachsen mehr erweiterte und schließlich können Sie bauen riesige Formen mit einer Handvoll Zeilen code überschreiben nur, was notwendig ist.
Sagen, Sie wollen an Ihre form angepassten Parametern wie der
request
Objekt (sehr Häufig, wenn Sie benötigen Zugriff auf die dem Benutzer im Formular): Sie müssen lediglich zum überschreibenget_form_kwargs
.Class based views sind ein leuchtendes Beispiel für intelligente Klasse-Nutzung. Es gab mir ein tolles intro zum Aufbau meiner eigenen Mixins in Verbindung für Ansichten und python-Klassen im Allgemeinen. Es spart unzählige Stunden.
Wow, das hat lange. Zu glauben, es begann als eine bloße URL der docs Kommentar 🙂 Hoffe, das hilft!
InformationsquelleAutor der Antwort Yuji 'Tomita' Tomita