jon*_*alv 5 django django-models
我正在存储文件并需要一个唯一的文件名。我找到了使用 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) )
Run Code Online (Sandbox Code Playgroud)
并得到错误:TypeError: unbound method get_available_name() must be called with Storage instance as first argument (got CharField instance instead)我将其解释为我正在尝试在类上运行该方法,但我需要一个存储实例来运行它。存在一种叫做 DefaultStorage 的东西,它应该是“提供对当前默认存储系统的延迟访问”的东西,但它没有该get_available_name方法,而只有一个_setup不能在类上调用的方法。那么我应该如何让一个实例在这里工作呢?
参数upload_to是您要将文件上传到的目录路径。存储的参数被命名为storage
因此,如果你想更改默认的 Django 存储实现,你应该做的是使用例如
filecontent = models.FileField(null=True, upload_to='path/to/dir', storage=FileSystemStorage())
Run Code Online (Sandbox Code Playgroud)
如果您需要实现自己的方式来处理文件名,您只需创建继承Storage并覆盖其get_available_name方法的类。例如:
class MyOwnStorage(FileSystemStorage):
def get_available_name(self, name):
if self.exists(name):
#return something
else:
#return something_else
Run Code Online (Sandbox Code Playgroud)
然后按如下方式使用它:
filecontent = models.FileField(null=True, upload_to='path/to/dir', storage=MyOwnStorage())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |