Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对Django使用clean()方法_Python_Django_Django Forms - Fatal编程技术网

Python 对Django使用clean()方法

Python 对Django使用clean()方法,python,django,django-forms,Python,Django,Django Forms,我想知道如何在我的表单中设置一个clean方法,因为我相信我的函数写得很好,但我没有克服它以获得预期的结果 我有一个简单的模型: class Document(models.Model): ... format = models.CharField(max_length=10, verbose_name=_('format'), choices=FORMAT_CHOICES, null=False, blank=False) upload = models.FileFie

我想知道如何在我的表单中设置一个
clean方法
,因为我相信我的函数写得很好,但我没有克服它以获得预期的结果

我有一个简单的模型

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']
我有一张表格

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']
此方法必须检查choosen格式和文件上载扩展名是否相同。如果不是,它应该返回一个错误

我得到了这个问题:

'TemporaryUploadedFile' object has no attribute 'split'

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

您应该拆分文件名,而不是临时上载的文件对象以获得扩展名。尝试使用upload.name获取文件名。

这似乎可行,但我还有另一个问题,因此我现在可以看到预期的结果。非常感谢。