Cố gắng giải quyết vấn đề thú vị ngay bây giờ.Xác thực mẫu Django ModelForm
Tôi có mô hình Django với trường image
không bắt buộc, nhưng được đặt thành giá trị mặc định khi tạo phiên bản mẫu mới.
class Product(models.Model):
image = models.ImageField(upload_to='/image/directory/', default='/default/image/path/', blank=True)
Tôi cũng có ModelForm dựa trên mô hình đó, bao gồm trường image
và có một số xác thực tùy chỉnh.
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ('image',)
def clean_image(self):
image = self.cleaned_data.get('image', False)
if image:
# validate image
return None
Vấn đề là per the docs, gọi is_valid()
trên ModelForm
gây nên mô hình xác nhận ngoài việc tạo xác nhận, vì vậy khi một người dùng gửi các hình thức mô hình mà không có một hình ảnh, tùy chỉnh mã xác nhận hình thức của tôi cố gắng để xác nhận mô hình mặc định hình ảnh, thay vì không làm gì cả.
Làm cách nào để không làm bất kỳ điều gì trừ khi bản thân biểu mẫu có giá trị cho trường image
?
'blank = True' là xác thực ở cấp cơ sở dữ liệu và' null = True' là xác thực ở cấp mô hình, vì vậy bạn cần phải thêm 'null = True'. – karthikr
@karthikr: Điều đó không đúng. 'null là hoàn toàn liên quan đến cơ sở dữ liệu, trong khi đó trống là có liên quan đến xác thực. Nếu một trường có trống = Đúng, xác thực biểu mẫu sẽ cho phép nhập một giá trị rỗng. Nếu một trường trống = False, trường sẽ được yêu cầu.'. [Xem thêm thông tin tại đây.] (Https://docs.djangoproject.com/en/dev/ref/models/fields/#blanko) –
@karthikr Tôi nghĩ bạn có thể muốn kiểm tra lại điều đó. Từ tài liệu 'null là hoàn toàn liên quan đến cơ sở dữ liệu, trong khi trống là liên quan đến xác thực.' https://docs.djangoproject.com/en/dev/ref/models/fields/#field-options –