1

我基于 Django 框架修改项目。我有表格来添加一个项目。商品有封面(图片)。此商品商店封面的 url 的当前模型版本如下:

class Item(models.Model):
    title = models.CharField(max_length = 255, db_index = True)
    slug = models.CharField(max_length = 80, db_index = True)
    categories = models.ManyToManyField(Category)
    cover_url = models.CharField(max_length = 255, null = True, default = None)
    ...

重要注意,一些图像存储在其他服务器上(不同的文件托管)。

我想用 ImageField 替换 CharField。但是现有的项目呢?我想更改模型的架构并保存所有以前添加的图像。我怎样才能实现这个目标?

也许这种修改的一些原因可能会有所帮助。主要原因是为用户提供从他们的计算机上传图像的能力(不仅仅是插入网址)。

蒂亚!

4

1 回答 1

2

如果cover_url可以有现有源 - 您必须有自定义存储,可以处理外部源。

这是ImageField来自django 文档的自定义存储使用示例:

from django.db import models
from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location='/media/photos')

class Car(models.Model):
    ...
    photo = models.ImageField(storage=fs)

让我们跳出来,我们会得到这样的代码:

from django.db import models
from django.core.files.storage import FileSystemStorage

def is_url(name):
    return 'http' in name

class MyStorage(FileSystemStorage):
    #We should override _save method, instead of save. 
    def _save(self, name, content=None):
        if content is None and is_url(name):
            return name
        super(MyStorage, self)._save(name, content)

fs = MyStorage()

class Item(models.Model):
    title = models.CharField(max_length = 255, db_index = True)
    slug = models.CharField(max_length = 80, db_index = True)
    categories = models.ManyToManyField(Category)
    cover_url = models.ImageField(storage=fs)

它有很大的改进空间 - 这里只显示想法。

于 2012-07-30T08:36:13.477 回答