[英]Django form validation doesn't get triggered
我已經看到許多關於django驗證器的問題,但並沒有給出正確的答案,但是我有一個不同的問題。 即使從Django文檔示例中復制,我的礦井甚至都不會觸發。 這是我所擁有的:
models.py
def content_file_name(instance, filename):
ext = ''.join(filename.split())[:-4]
foldername = "%s/%s" % (uuid.uuid4(), ext)
return '/'.join(['documents', str(foldername), filename])
class Document(models.Model):
docfile = models.ImageField(upload_to=content_file_name)
class DocumentImage(models.Model):
imagefile = models.ImageField(upload_to=content_file_name)
image = models.ForeignKey(Document, related_name='Image', null=True, on_delete=models.CASCADE)
views.py
def documentlist(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = form.save()
newdoc.create_documentfiles()
messages.add_message(request, messages.INFO, "Saved")
return HttpResponseRedirect(reverse('list'))
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render(
request,
'list.html',
{'documents': documents, 'form': form}
)
表格
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ('docfile',)
def clean_image(self):
file = self.cleaned_data.get('docfile')
if file:
if imghdr.what(file.read()) != "gif":
raise forms.ValidationError("Please upload a .gif file")
print('complete');
file.seek(0)
return file
我什至嘗試像這樣設置forms.py :
def clean_image(self):
print('test')
raise forms.ValidationError("Please upload a .gif file")
而且我仍然沒有在控制台中打印ValidationError
或test
。 有人遇到過這樣的問題嗎?
驗證函數的名稱為clean_image
,但表單上沒有image
字段
fields = ('docfile',)
因此它不會被調用。 它應該被稱為clean_docfile
如果你想驗證docfile
場
在表單子類上調用
clean_<fieldname>()
方法-其中<fieldname>
被替換為表單字段屬性的名稱。 此方法執行特定於該特定屬性的任何清理,而與該字段的類型無關。 此方法未傳遞任何參數。 您將需要在self.cleaned_data中查詢該字段的值,並記住這時它將是一個Python對象,而不是表單中提交的原始字符串(它將在cleaned_data中,因為常規字段clean()方法,上面的數據已經清除了一次)。
https://docs.djangoproject.com/zh-CN/1.11/ref/forms/validation/
您的干凈方法名稱應重命名為
def clean_docfile(self):
print('test')
raise forms.ValidationError("Please upload a .gif file")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.