Wykonuję podstawową operację tworzenia/sprawdzania/zapisywania w Django ModelForm. Moje niestandardowe czyste metody nie są wywoływane, gdy wywoływana jest funkcja is_valid() podczas uruchamiania kodu pod debugerem Eclipse, a ja ustawiam punkt przerwania po utworzeniu formularza i wywołaniu funkcji is_valid().Django ModelForm niewymagające czyszczenia
Wiele razy prześledziłem kod bazowy Django i wydaje się, że słownik błędów w klasie ModelForm nigdy nie jest ustawiony na Brak, który wyzwala sprawdzanie poprawności. Podejrzewam, że jest to spowodowane interakcją z debuggerem uzyskującym atrybut _errors modeluForm do wyświetlenia w panelu zmiennych.
Po usunięciu wszystkich punktów przerwania i umożliwieniu naturalnego przepływu kodu, mogę udowodnić, że niestandardowy, czysty kod działa, wydając polecenia drukowania.
Czy jest to usterka w projekcie Django ModelForm, problem Eclipse, czy też mam na myśli złe drzewo?
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
Moje jarzmo testowe:
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
Spróbuj: ff = OrderTestForm (data = row) – Brandon
Dzięki za sugestię. Próbowałem bez żadnych zmian. Powinienem trochę wyjaśnić problem. Jeśli mam punkt przerwania Eclipse w tworzeniu ModelForm i STEP, a następnie wznawiam, punkty przerwania w clean nie są uruchamiane. ALE instrukcje drukowania w czyszczeniu są drukowane po wykonaniu tego pierwszego kroku. Oznacza to, jak sądzę, że gdy Eclipse próbuje uzyskać dostęp do obiektu ModelForm, aby odczytać jego atrybuty, uruchamia czyste. Jest to oczekiwane zachowanie zgodnie z dokumentacją Django. Tworzy jednak problem, ponieważ is_valid() nie będzie działał poprawnie. –
Czy możesz opublikować swoją pełną sprawę testową? – Brandon