我基于Django框架修改项目。我有表格来添加项目。项目有封面(图像)。该商品的当前版本的商店封面的网址如下:
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。但现有物品怎么样?我想更改模型的架构并保存以前添加的所有图像。我如何才能实现这一目标?
这种修改的一些原因可能会有所帮助。主要原因是为用户提供从计算机上传图像的能力(不仅仅是插入网址)。
TIA!
答案 0 :(得分:2)
如果cover_url
可以拥有现有来源 - 您必须拥有可以处理外部来源的自定义存储空间。
以下是来自django documentation的ImageField
的自定义存储空间使用示例:
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)
它有很大的改进空间 - 这里只显示了想法。