【发布时间】:2019-07-14 21:48:01
【问题描述】:
我正在使用 CreateView 并且在模板中,我正在上传多个文件以存储在数据库中。我从files = self.request.FILES.getlist('file') 的请求中获取所有文件并循环它为每个文件创建一个对象。但是,对象创建仅适用于列表中的最后一个对象。
def form_valid(self, form):
files = self.request.FILES.getlist('file')
allowed_file_extensions = ['xls', 'xlsx', 'doc', 'docx', 'pdf']
for file in files:
file_converted_to_string = str(file)
file_regex = re.search(r"([a-zA-Z0-9-_\s]+)[.](\w+?)$", file_converted_to_string)
file_name, file_extension = file_regex.group(1), file_regex.group(2)
if file_extension in allowed_file_extensions:
self.object = form.save(commit=False)
self.object.file = file
self.object.file_name = file_name
self.object.file_extension = file_extension
self.object.department_belonged = self.request.user.profile.department
print(self.request.user.profile.department)
self.object.creator = self.request.user
self.object.save()
return super().form_valid(form)
更有趣的是,当我替换时:
self.object = form.save(commit=False)
self.object.file = file
self.object.file_name = file_name
self.object.file_extension = file_extension
self.object.department_belonged = self.request.user.profile.department
self.object.creator = self.request.user
self.object.save()
与:
self.model.objects.create(file=file,
file_name=file_name,
file_extension=file_extension,
department_belonged=self.request.user.profile.department,
creator=self.request.user)
它为列表中的每个文件创建一个新对象,但在 models.py 中的 upload_to 函数中引发错误。
file = models.FileField(upload_to=file_path)
def file_path(instance, filename):
return f'{instance.creator.profile.department}/user_{instance.creator.id}/{filename}'
错误:
异常值:“NoneType”对象没有属性“profile”
【问题讨论】:
标签: django python-3.x django-views