Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Django 清洁<;fieldname>;()防止文件使用上载到_Django - Fatal编程技术网

Django 清洁<;fieldname>;()防止文件使用上载到

Django 清洁<;fieldname>;()防止文件使用上载到,django,Django,Django==1.11.6 我只想加载具有允许扩展名的文件。 文件仅通过Django admin加载 我在get_item_路径中放置了一个断点(在这里用注释标记) clean_file方法以某种方式阻止解释器访问 获取项目路径。换句话说,解释器不会在断点处停止 如果我将clean_文件注释掉,断点就会工作 那么,get\u item\u路径被忽略。顺便说一下,ItemFile对象已经创建。但文件未保存(上载的文件不显示在媒体根目录中) 你能帮我理解我在这里做错了什么吗? 型号.py def

Django==1.11.6

我只想加载具有允许扩展名的文件。 文件仅通过Django admin加载

我在get_item_路径中放置了一个断点(在这里用注释标记)

clean_file方法以某种方式阻止解释器访问 获取项目路径。换句话说,解释器不会在断点处停止

如果我将clean_文件注释掉,断点就会工作

那么,get\u item\u路径被忽略。顺便说一下,ItemFile对象已经创建。但文件未保存(上载的文件不显示在媒体根目录中)

你能帮我理解我在这里做错了什么吗?

型号.py

def get_item_path(instance, filename):
    item_dir = instance.item.get_item_directory() # Breakpoint
    return '{directory}/{filename}'.format(directory=item_dir,
                                           filename=filename)


class ItemFile(models.Model):

    file = models.FileField(blank=False,
                            max_length=255,
                            upload_to=get_item_path,
                            verbose_name=_("file"))
class ItemFileForm(ModelForm):
    model = ItemFile

    def clean_file(self):
        permitted_extensions = list(PermittedFileFormats.objects.values_list("file_ext", flat=True))
        filename = self.cleaned_data['file'].name
        real_ext = filename.split(".")[-1]

        if real_ext not in permitted_extensions:
            raise ValidationError(_("File doesn't have a permitted extention!"))
        else:
            return filename

class ItemFileInline(admin.StackedInline):
    model = ItemFile
    form = ItemFileForm
    extra = 0
admin.py

def get_item_path(instance, filename):
    item_dir = instance.item.get_item_directory() # Breakpoint
    return '{directory}/{filename}'.format(directory=item_dir,
                                           filename=filename)


class ItemFile(models.Model):

    file = models.FileField(blank=False,
                            max_length=255,
                            upload_to=get_item_path,
                            verbose_name=_("file"))
class ItemFileForm(ModelForm):
    model = ItemFile

    def clean_file(self):
        permitted_extensions = list(PermittedFileFormats.objects.values_list("file_ext", flat=True))
        filename = self.cleaned_data['file'].name
        real_ext = filename.split(".")[-1]

        if real_ext not in permitted_extensions:
            raise ValidationError(_("File doesn't have a permitted extention!"))
        else:
            return filename

class ItemFileInline(admin.StackedInline):
    model = ItemFile
    form = ItemFileForm
    extra = 0
如果没有错误,
clean_file()
方法应该返回
self.cleaned_数据[“file”]
,而不是它的
名称
属性