我有自定义文件系统存储。
其思想是传递可选的文件名参数。
我的客户存储代码:
class SalesMapFileStores(FileSystemStorage):
def __init__(self, location=None, base_url=None, filename=None):
if filename:
self.filename = filename
super(SalesMapFileStores, self).__init__(location=location, base_url=base_url)
def get_available_name(self, name):
return name
def get_valid_name(self, name):
if self.filename:
return self.filename
return name
def _save(self, name, content):
if self.exists(name):
self.delete(name)
return super(SalesMapFileStores, self)._save(name, conten
我要做的是从模型中传递这个文件名参数。
像这样的东西:
class SalesMapImage(models.Model):
name = models.CharField(max_length=254, verbose_name='Filename')
image = SalesMapImageField(upload_to='SalesMap/Test', storage=SalesMapFileStores(filename=name), verbose_name='Test Image',
content_types=('image/jpeg', 'image/png'))
但在本例中,Django本身作为参数传递模型.CharField(很明显:)。
问题是:如何从存储访问模型实例?
提前谢谢!你知道吗
好吧,这是一个有点疯狂的想法,但您可以尝试重写对该类中该字段的赋值,以便
SalesMapFileStores
实例始终与name
字段保持同步,如下所示:一般的想法是将值的赋值与文件名字段的更新挂钩。你知道吗
这是假设您不想从视图中手动更新它。因为这样做不需要太多努力
model_instance.storage.filename = self.name
,甚至不需要向自定义存储类添加方法来更新文件名。你知道吗更新:前往
storage=SalesMapFileStores()
。您正在传递SalesMapFileStores
的一个实例。不是类,所以您可能会使用同一个instace来存储所有文件,这会与filename
冲突。你可以这样试试:storage=SalesMapFileStores
希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐