Django Modelform nicht Validierung ohne Fehler
-
28-09-2019 - |
Frage
Ok, ich habe stundenlang auf dieser gestarrt versuchen, herauszufinden, was los ist, ohne Erfolg. Ich versuche, eine Modelform mit der ‚Instanz‘ Keyword erstellen sie eine bestehende Modellinstanz weitergeben und speichern Sie es. Hier ist die Modelform (deutlich vom Original in meinen Versuchen beraubt, die Ursache dieses Problems zu identifizieren):
class TempRuleFieldForm(ModelForm):
class Meta:
model = RuleField
und hier ist der Code Ich bin mit:
>>> m = RuleField.objects.get(pk=1)
>>> f = TempRuleFieldForm(instance=m)
>>> f.is_valid()
False
Das Modellobjekt (m
oben) gültig ist und es spart ganz gut, aber das Formular nicht Validieren. Nun, soweit ich das beurteilen kann, dieser Code ist identisch mit dem Beispiel Django docs finden Sie hier: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method , obwohl offensichtlich fehlt mir etwas. Ich würde ein paar frischen Augen sehr schätzen, mir zu sagen, was ich falsch gemacht habe.
Danke
Lösung
Beachten Sie, dass Ihr Link nicht f.is_valid()
nicht nennen, es spart nur direkt. Dies ist möglicherweise ein wenig irreführend.
Der Punkt ist, dass ein Formular mit nur einem instance
Parameter Instanziieren aber keine data
tut nicht binden Sie es an Daten, und die Form daher nicht gültig ist. Sie werden sehen, dass f.is_bound
falsch ist.
Hinter den Kulissen ist instance
wirklich nur die gleiche initial
Daten wie vorbei, die als Dokumente zur Kenntnis nur die Daten verwendet wird zunächst angezeigt und dient zum Speichern nicht verwendet. Sie würden wahrscheinlich beim Lesen der Notizen auf und ungebundenen Formen gebunden profitieren.
Andere Tipps
Wenn u noch um das Objekt validieren möchten, die in der Datenbank war, können Sie es zuerst serialisiert und dann mit ihm das Formular erstellen.
from django.utils import simplejson
from django.core.serializers import serialize
(...)
fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields']
form = forms.MyForm(fields_dict)
if form.is_valid
Dies ist wahrscheinlich nicht der beste Weg, es zu tun, aber das einzige, das ich gefunden habe, eine gebundene Form von einem Modell zu bekommen. Ich brauche es, weil ich die aktuellen Daten in der Datenbank validieren möchten. Erstelle ich eine Frage, da ich nicht glaube, das ist der beste Weg, es zu tun:
Verwandeln Sie ein ungebundenes Formular ein gebundenes ein?
Dies ist keine Lösung für die OP, aber es ist für den Post-Titel, die ziemlich hoch in Google ist. Also werde ich es schreibe sowieso, von hier :
Wenn Sie bereits request.POST zu Ihrem Formular request.POST or None
zu geben, aber es ist immer noch ohne Fehler ungültig, prüfen Sie, dass es keine Umleitung geht. Eine Umleitung verliert Ihre POST-Daten und Ihre Form wird ohne Fehler sein ungültig, da es ungebunden ist.