Django FileField 保存 url 而不是数据库中的路径
Posted
技术标签:
【中文标题】Django FileField 保存 url 而不是数据库中的路径【英文标题】:Django FileField save the url instead of the path in the database 【发布时间】:2014-01-16 02:50:45 【问题描述】:我的表单上有一个 FileField。
我喜欢它的行为方式,将文件写入 MEDIA_ROOT 等。
我想更改它写入数据库的内容。
如果我查看数据库,我会看到路径.. /home/user/media/path/to/file.txt
我希望它写的是没有域 /media/file.txt
的 URL 路径
是否有要传递给 ModelForm 或 Model 的参数?
如果不是,我要覆盖哪个类?
将绝对路径写入数据库似乎是一种不好的做法。我需要能够动态更改 MEDIA_ROOT 和 MEDIA_URL。并且可能与其他只需要媒体 URL 的非 django 应用程序共享这个数据库。
【问题讨论】:
【参考方案1】:我没有看到将 URL 保存在数据库中的方法,但是您可以在数据库中保存相对路径。我想您已将 upload_to
设置为绝对路径。您可以将其更改为相对于您的MEDIA_ROOT
的路径,例如`upload_to="path/to/"。另请参阅official Documentation 关于这件事。
【讨论】:
我理解这种方法,但我希望记录是 '/media/path/to/file.txt' 和 upload_to='path/to/'。 @sk1p 的答案似乎是更好的选择,否则你在数据库中的“绝对性”有同样的问题,除了它是一个绝对 url 而不是绝对路径......换句话说,如果你有理由要更改MEDIA_URL
,那么您的数据将被破坏,但这样做@sk1p 的方式任何更改都由MEDIA_ROOT
和MEDIA_URL
设置处理以上是关于Django FileField 保存 url 而不是数据库中的路径的主要内容,如果未能解决你的问题,请参考以下文章
Django MEDIA_URL 返回 https 而不是 http
如何在 Django 的 FileField 中保存来自传入电子邮件的附件?
Django - 如何创建文件并将其保存到模型的 FileField?
使用 model.FileField 在 Django 中保存之前修改文件名