在Django中以编程方式上载文件

在Django中以编程方式上载文件,django,django-models,django-file-upload,Django,Django Models,Django File Upload,我已经检查了其他几个线程,但仍然有问题。我有一个包含一个文件字段的模型,我正在为各种目的生成半随机实例。但是,我上传文件时遇到问题 当我创建一个新文件时,它似乎可以工作(新实例保存到数据库),在适当的目录中创建了一个文件,但文件的内容丢失或损坏 以下是相关代码: class UploadedFile(models.Model): document = models.FileField(upload_to=PATH) from django.core.files import File

我已经检查了其他几个线程,但仍然有问题。我有一个包含一个文件字段的模型,我正在为各种目的生成半随机实例。但是,我上传文件时遇到问题

当我创建一个新文件时,它似乎可以工作(新实例保存到数据库),在适当的目录中创建了一个文件,但文件的内容丢失或损坏

以下是相关代码:

class UploadedFile(models.Model):
  document = models.FileField(upload_to=PATH)


from django.core.files import File

doc = UploadedFile()
with open(filepath, 'wb+') as doc_file:
   doc.documen.save(filename, File(doc_file), save=True)
doc.save()

谢谢大家!

可以像打开文件一样简单吗。由于您在“wb+”(写入、二进制、追加)中打开了文件,因此句柄位于文件的末尾。尝试:

class UploadedFile(models.Model):
  document = models.FileField(upload_to=PATH)


from django.core.files import File

doc = UploadedFile()
with open(filepath, 'rb') as doc_file:
   doc.document.save(filename, File(doc_file), save=True)
doc.save()

现在它在文件开头打开。

一个幸运的猜测;)。。。我从未真正需要通过编程上传文件,但这是我唯一能看到的可疑之处。为什么要保存整个模型?它不是多余的吗(前面用
doc.document.save()
调用
save=True
)我实际上也遇到过类似的问题,添加“b”标志解决了问题-我正在打开pdf文件。什么是
filename