我正在上传文件并将元数据存储在数据库中。元数据的一部分是文件名本身。然而,在某处,文件名似乎没有被保存!为了保持简短,我将只粘贴我认为相关的代码部分。
class UploadFile(models.Model):
...
theFile = models.FileField(upload_to = "Genius/Uploads/", null = True)
filename = models.CharField(max_length = 50, blank = True, null = False)
class UploadFileForm(ModelForm):
class Meta:
model = UploadFile
fields = ('title', 'theFile', 'date_uploaded',) # Don't prompt for filename
def files_upload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
form.filename = request.FILES['theFile'].name # TODO: sanitize!
# form.filename = 'foo'
form.save()
return HttpResponseRedirect('/files/upload/successful/')
else:
form = UploadFileForm()
return render_to_response('files/upload_file.html', { 'form': form })
我在保存表单之前和之后检查了 request.FILES['theFile'].name 的值。无论出于何种原因,它都完好无损,但似乎从未进入数据库。
最佳答案
这是因为 form.filename
是表单字段,而不是它将保存的值。
您正在寻找这样的东西:
class UploadFileForm(ModelForm):
def save(self, commit=True):
instance = ModelForm.save(self, commit=False)
instance.filename = self.files['theFile'].name
if commit:
instance.save()
return instance
class Meta:
model = UploadFile
fields = ('title', 'theFile', 'date_uploaded',) # Don't prompt for filename
替代解决方案:
upload_file = form.save(commit=False)
upload_file.filename = request.FILES['theFile'].name
upload_file.save()
关于python - Django文件上传: filename not sticking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840138/