在Django中将CharField文件名转换为ImageField
我有一个模型:
class Photo(models.Model):
filename = models.CharField(max_length=240)
还有一个对应的MySQL表,里面填满了文件名(这些文件名是从一个已有的表复制过来的)。
将来我可能想通过管理后台上传新照片到这个模型里。请问我能否把现在的模型改造成带有图片字段的形式,并把我之前的数据整合进去呢?
1 个回答
1
假设你模型里的 filename
字段已经包含了实际文件的完整路径,你可以在模型中添加一个新的字段(ImageField),然后使用 South 工具进行迁移,接着写一个脚本来更新你的数据。
下面是一个简单的示例:
from django.core.files import File
# assuming your updated model looks like:
# class Photo(models.Model):
# filename = models.CharField(max_length=240)
# image = models.ImageField(max_length=240)
photos = Photo.objects.all()
for p in photos:
f = open(p.filename)
myimage = File(f)
p.image.save(image_name, myimage) # name, content
然后通过 South 删除旧的 filename
字段。建议你先看看 Django 的 FileField
,因为 ImageField
基本上是继承了它的所有属性和方法。(可以查看 这个链接 获取更多信息)