如何使用django.core.files.storage.get_available_name?

时间:2016-05-09 09:23:46

标签: django django-models

我正在存储文件,需要一个唯一的文件名。我找到了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也不能在类上调用。那么我该如何让一个实例在这里工作?

1 个答案:

答案 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())