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