Ich führe eine grundlegende Django ModelForm erstellen/validieren/speichern Vorgang. Meine benutzerdefinierten Clean-Methoden werden nicht aufgerufen, wenn is_valid() aufgerufen wird, wenn der Code unter dem Eclipse-Debugger ausgeführt wird, und ich setze einen Haltepunkt nach der Formularerstellung und dem Aufruf von is_valid().Django ModelForm nicht sauber aufrufen
Ich habe den Django-Basiscode zahlreiche Male verfolgt und es scheint, dass das Fehlerwörterbuch der ModelForm-Klasse nie auf None gesetzt ist, was die Validierung auslöst. Ich vermute, dass dies auf eine Interaktion mit dem Debugger zurückzuführen ist, der auf das _errors-Attribut von ModelForm zugreift, um im Variablenfenster angezeigt zu werden.
Wenn ich alle Haltepunkte entferne und den Code auf natürliche Weise fließen lasse, kann ich beweisen, dass der benutzerdefinierte Bereinigungscode ausgeführt wird, indem Druckanweisungen ausgegeben werden.
Ist das ein Fehler im Django ModelForm-Design, ein Eclipse-Problem oder belle ich den falschen Baum?
models.py
from django.db import models
class TestModel1(models.Model):
field1 = models.CharField(max_length=45)
field2 = models.IntegerField(default=2)
field3 = models.CharField(max_length=45, null=True, blank=True)
forms.py
from order.models import TestModel1
from django.forms import ModelForm
class OrderTestForm(ModelForm):
def clean_field1(self):
return self.cleaned_data['field1']
def clean_field2(self):
return self.cleaned_data['field2']
class Meta:
model = TestModel1
Mein Test-Harnisch:
from forms import OrderTestForm
row = {'field1': 'test value', 'field2': '4', }
ff = OrderTestForm(row)
#ff.full_clean()
if ff.is_valid():
ff.save()
else:
print ff.errors
Versuchen: ff = OrderTestForm (data = Zeile) – Brandon
Danke für den Vorschlag. Ich habe das ohne Veränderung versucht. Ich sollte das Problem ein wenig klären. Wenn ich einen Eclipse-Haltepunkt bei der ModelForm-Erstellung und STEP habe und dann fortsetze, werden die Haltepunkte im Clean nicht ausgelöst. ABER alle Druckanweisungen in den Cleans werden gedruckt, nachdem ich diesen ersten Schritt gemacht habe. Das heißt, ich glaube, wenn Eclipse versucht, auf das ModelForm-Objekt zuzugreifen, um seine Attribute zu lesen, löst es das Clean aus. Dies ist das erwartete Verhalten gemäß den Django-Dokumenten. Es schafft jedoch ein Problem, da das is_valid() nicht richtig funktioniert. –
Können Sie bitte Ihren vollständigen Testfall posten? – Brandon