Tôi đang thực hiện một mô hình Django ModelForm tạo/xác thực/lưu hoạt động cơ bản. Các phương thức clean tùy chỉnh của tôi không được gọi khi is_valid() đang được gọi khi chạy mã trong trình gỡ lỗi Eclipse và tôi thiết lập một điểm ngắt sau khi tạo biểu mẫu và gọi hàm is_valid().Django ModelForm không gọi điện thoại sạch
Tôi đã truy tìm thông qua mã cơ sở Django nhiều lần và có vẻ như từ điển lỗi trên lớp ModelForm không bao giờ được đặt thành Không, kích hoạt xác thực. Tôi nghi ngờ rằng điều này là do sự tương tác với trình gỡ lỗi truy cập thuộc tính _errors của ModelForm để hiển thị trong ngăn biến.
Khi tôi xóa tất cả các điểm ngắt và để dòng mã tự nhiên, tôi có thể chứng minh rằng mã sạch tùy chỉnh đang chạy bằng cách phát hành các lệnh in.
Đây có phải là một lỗ hổng trong thiết kế Django ModelForm, một vấn đề về Eclipse hay tôi đang sủa cây sai?
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
khai thác thử nghiệm của tôi:
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
Hãy thử: ff = OrderTestForm (data = hàng) – Brandon
Cảm ơn bạn đã đề xuất. Tôi đã thử điều đó mà không thay đổi. Tôi nên làm rõ vấn đề một chút. Nếu tôi có một breakpoint Eclipse về việc tạo ModelForm và STEP và sau đó tiếp tục, các điểm ngắt trong sạch sẽ không được kích hoạt. NHƯNG bất kỳ câu lệnh in nào trong phần làm sạch được in sau khi tôi thực hiện bước đầu tiên đó. Điều đó có nghĩa là, tôi tin rằng khi Eclipse cố gắng truy cập đối tượng ModelForm để đọc các thuộc tính của nó, nó sẽ làm sạch nó. Đây là hành vi dự kiến theo các tài liệu Django. Tuy nhiên, nó tạo ra một vấn đề, vì is_valid() sẽ không hoạt động đúng. –
Bạn có thể đăng bài kiểm tra đầy đủ của mình không? – Brandon