Sto eseguendo un Django ModelForm di base per creare/validare/salvare l'operazione. I miei metodi clean personalizzati non vengono chiamati quando viene chiamato is_valid() durante l'esecuzione del codice sotto il debugger Eclipse e imposto un breakpoint dopo la creazione del modulo e la chiamata a is_valid().Django ModelForm not calling clean
Ho rintracciato il codice base Django numerose volte e sembra che il dizionario degli errori sulla classe ModelForm non sia mai impostato su Nessuno, che attiva la convalida. Sospetto che ciò sia dovuto a un'interazione con il debugger che accede all'attributo _errors di ModelForm da visualizzare nel riquadro delle variabili.
Quando rimuovo tutti i punti di interruzione e faccio scorrere il codice in modo naturale, posso provare che il codice pulito personalizzato è in esecuzione emettendo dichiarazioni di stampa.
È un difetto nel design ModelForm di Django, un problema di Eclipse o sto abbaiando dall'albero sbagliato?
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
mio test harness:
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
Prova: FF = OrderTestForm (data = fila) – Brandon
Grazie per il suggerimento. L'ho provato senza modifiche. Dovrei chiarire un po 'il problema. Se ho un breakpoint di Eclipse sulla creazione ModelForm e su STEP e quindi riprendo, i punti di interruzione in clean non vengono attivati. MA qualsiasi affermazione di stampa nelle pulizie viene stampata dopo aver fatto il primo passo. Ciò significa, credo, che quando Eclipse tenta di accedere all'oggetto ModelForm per leggerne gli attributi, attiva il clean. Questo è il comportamento previsto secondo i documenti di Django. Crea un problema, tuttavia, poiché is_valid() non funziona correttamente. –
Potete per favore pubblicare il vostro caso di test completo? – Brandon