如何将序列化数据上传到Django的FileField?
我想把在Python中生成的大数据集存储到Django模型里。我的想法是把数据转成字符串,然后上传到我模型的FileField里。我的Django模型是:
#models.py
from django.db import models
class Data(models.Model):
label = models.CharField(max_length=30)
file = models.FileField(upload_to="data")
在我的Python程序中,我想做以下操作:
import random, pickle
data_entry = Data(label="somedata")
somedata = [random.random() for i in range(10000)]
# Next line does NOT work
#data_entry.file.save(filename, pickle.dumps(somedata))
我应该如何修改最后一行,以便把 somedata
存储到 file
中,同时保留通过 upload_to
参数定义的路径呢?
5 个回答
1
在你的数据库中,file 属性其实就是一个文件的路径。所以,由于你并没有真正上传文件,你需要先把文件存储到磁盘上,然后再把这个路径保存到数据库里。
f = open(filename, 'w')
pickle.dump(somedata, f)
f.close()
data_entry.file=filename
data_entry.save()
11
根据我对问题的回答,我想出了以下解决方案:
from django.core.files.base import ContentFile
import pickle
content = pickle.dumps(somedata)
fid = ContentFile(content)
data_entry.file.save(filename, fid)
fid.close()
这一切都是在服务器端完成的,用户不能上传任何“腌黄瓜”(这里指的是一种数据格式)。我测试过了,效果很好,但我也欢迎任何建议。
-3
注意:请查看下面的其他回答和评论 - 旧的信息和失效的链接已被删除(无法删除曾被接受的回答)。
Marty Alchin在《Pro Django》第三章中有相关内容,可以在这里查看评论。