繁体   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