我需要将fastapi UploadFile
对象直接保存到下面定义的Django模型中:
class MyFile(models):
file = models.FileField(upload_to="files/")
字符串
在API中,我设法使用read
和write
方法从SpooledTemporaryFile
中获取文件对象,如下面的代码块所示:
async def file_upload(file: UploadFile = File(...)):
async with aiofiles.open(f"path/{file.filename}", "wb") as media:
cont = await file.read()
await media.write(cont)
型
然后我尝试在Django中将新文件转换为FieldFile
类型,以便能够将其保存在MyFile.file
字段中,但它一直返回TypeError
和描述:write()参数必须是str,而不是generator
from django.core.files import File as DjangoFile
async def file_upload(file: UploadFile = File(...)):
...
async with aiofiles.open(f"path/{file.filename}") as media:
d_file = DjangoFile(media)
file_model = MyFile()
file_model.file.save(file.filename, d_file)
file_model.save()
return {"ok": True}
型
堆栈跟踪显示file_model.file.save(file.filename, d_file)
是违规行。
>>> type(file.filename)
str
>>> type(d_file)
<class 'django.core.files.base.File'>
型
你能给我指个方向吗?
1条答案
按热度按时间hmtdttj41#
因此,从this开始,我决定通过model方法保存
MyFile
,该方法主要检查dir
中的最新文件,并在从upload_file
API代码中调用时将其保存在file
字段中,如图所示:字符串
然后在模型中,我重构了保存()方法如下:
型