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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top