当前我想在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()
我发现它在数据库上保存了这样的东西:"text文件":"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')
Hope可以帮助遇到类似问题的人。