CharField文件名在Django中的ImageFields中

时间:2011-08-15 17:40:38

标签: python django django-models

我有一个模特:

class Photo(models.Model):
    filename = models.CharField(max_length=240)

一个相应的MySQL表,填充了文件名(从现有表中复制)。

将来我可能想通过管理员将新照片上传到模特。是否有可能将当前模型演化为ImageFields并集成我的遗留数据?

1 个答案:

答案 0 :(得分: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基本上继承了所有前者的属性和方法。 (见https://docs.djangoproject.com/en/1.3/ref/models/fields/#django.db.models.FileField