我正在存储文件,需要一个唯一的文件名。我找到了a suggestion to use django.core.files.storage.get_available_name,但我完全错过了一些东西。我试过这个:
class MyModel(models.Model):
name = models.CharField( max_length=200, null=True )
filecontent = models.FileField( null=True, upload_to=Storage.get_available_name(name) )
得到错误:TypeError: unbound method get_available_name() must be called with Storage instance as first argument (got CharField instance instead)
我将其解释为意味着我正在尝试在类上运行该方法,但我需要一个存储实例来运行它。存在一些名为DefaultStorage的东西,它应该是something that "provides lazy access to the current default storage system",但是那个没有get_available_name
方法,只有一个方法_setup
也不能在类上调用。那么我该如何让一个实例在这里工作?
答案 0 :(得分:1)
upload_to
参数用于您要将文件上载到的目录路径。存储参数仅以storage
所以,如果你想改变默认的Django存储实现,你应该怎么做才能使用
filecontent = models.FileField(null=True, upload_to='path/to/dir', storage=FileSystemStorage())
如果您需要实现自己的方式来使用文件名,则只需创建继承自Storage
的类并覆盖它的get_available_name
方法。例如:
class MyOwnStorage(FileSystemStorage):
def get_available_name(self, name):
if self.exists(name):
#return something
else:
#return something_else
然后按如下方式使用它:
filecontent = models.FileField(null=True, upload_to='path/to/dir', storage=MyOwnStorage())