python - Django 在 MEDIA_ROOT 文件夹中创建文件并将其保存到 FileField
问题描述
目前我想在 MEDIA_ROOT 文件夹下创建一个文件并将其保存到 FileField。我在 SO 网站上进行了搜索,尝试了django-how-to-create-a-file-and-save-it-to-a-models-filefield等方法,但看起来它在我的数据库中保存了绝对路径。
我的模特
class Voice(models.Model):
xxx other field
textFile = models.FileField(null=True,blank=True,default=None,upload_to='text_file', unique=True)
更新 textFile 字段如下:
@receiver(post_save, sender=Voice)
def create_text(sender,**kwargs):
xxx
f = open(settings.MEDIA_ROOT + '/text_file/'+ text_file,'w')
queryset = Voice.objects.all()
queryset.filter(pk=voice.pk).update(textFile=File(f))
f.close()
我发现它在 db 上保存了这样的内容:“textFile”:“http://127.0.0.1:8000/media/Users/usersxxx/Documents/xxx/media/text_file/t5”
虽然不是:
"http://127.0.0.1:8000/media/text_file/t5",
解决方案
解决了这个问题。由于python无法打开具有相对路径的文件,导致问题的根本原因。所以我们可以分两步解决这个问题。
- 从绝对路径打开文件如下(使用绝对路径)
f = open(settings.MEDIA_ROOT + '/text_file/'+ text_file + '.txt','w') f.close()
- 然后更新/保存文件(使用相对路径)
queryset.filter(pk=voice.pk).update(textFile='text_file/' + text_file + '.txt')
希望可以帮助遇到类似问题的人。
推荐阅读
- android - 无法从带有后缀 HEAD-SNAPSHOT 的库中添加依赖项
- python - 已解决:使用 Discord.py API 解决的“RuntimeError:事件循环已关闭”
- python-3.x - 如何使用python获取任务标题
- visual-studio-code - 如何在 vscode 自定义主题中更改“this”关键字颜色
- flutter - 如何使用容器将身体分成3等份?
- mysql - 将 Ruby on Rails 从 Postgres 迁移到 mysql - 相当于 activerecord-postgres_enum?
- python - 如何将输入图像输入到 DNN 模型的集合中?
- reactjs - Reactjs响应问题
- javascript - 将整数转换为字符串,在小数点处拆分,然后将小数点包含在数组的第二部分?
- python - 在 chrome 中更改用户代理在 selenium webdriver python 中不起作用