在Django中使用clean()方法

时间:2018-12-05 14:34:15

标签: python django django-forms

我想知道如何在表单中设置clean method,因为我认为我的函数编写得很好,但是我并没有克服它以获得期望的结果。

我有一个简单的模型

class Document(models.Model):
    ...
    format = models.CharField(max_length=10, verbose_name=_('format'), choices=FORMAT_CHOICES, null=False, blank=False)
    upload = models.FileField(upload_to='media/files/', validators=[validate_file_extension], verbose_name=_('document file'), null=False, blank=False)

我有一个表格

class DocumentForm(forms.ModelForm):

    def clean(self):
        cleaned_data = super().clean()
        upload = cleaned_data.get("upload")
        file_format = upload.split(".")[-1]
        format = cleaned_data.get("format")
        if upload and format:
            if format != file_format:
                raise forms.ValidationError("Incorrect format and file format")

    def __init__(self, *args, **kwargs):
        super(DocumentForm, self).__init__(*args, **kwargs)

        for key in self.fields:
            self.fields[key].required = True

    class Meta:
        model = Document
        fields = ['format', 'upload']

此方法必须检查所选格式和文件上传扩展名是否相同。如果没有,它将返回一个错误。

我遇到了这个问题:

'TemporaryUploadedFile' object has no attribute 'split'

您是否知道如何检查两个字段是否正确?

1 个答案:

答案 0 :(得分:3)

您应该分割文件名而不是TemporaryUploadedFile对象以获取扩展名。尝试使用upload.name获取文件名。