在Django中将CharField文件名转换为ImageField

2 投票
1 回答
1042 浏览
提问于 2025-04-16 23:38

我有一个模型:

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 基本上是继承了它的所有属性和方法。(可以查看 这个链接 获取更多信息)

撰写回答