簡體   English   中英

Django表單驗證未觸發

[英]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")

而且我仍然沒有在控制台中打印ValidationErrortest 有人遇到過這樣的問題嗎?

驗證函數的名稱為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM