2011-02-04 36 views
6

我有一个自定义存储Django的自定义文件存储系统

import os 
from django.core.files.storage import Storage 


class AlwaysOverwriteFileSystemStorage(Storage): 
    def get_available_name(self, name): 
     """ 
     Directly Returns a filename that's 
     from what user input. 
     """ 
     if self.exists(name): 
    # Remove the existing file 
     os.remove(name) 
    # Return the input name as output 
     return name 

我想知道我应该把他的AlwaysOverwriteFileSystemStorage.py文件,以及如何应该由settings.py定义DEFAULT_FILE_STORAGE

我的Django的根文件夹是/home/username/webapp

当我把DEFAULT_FILE_STORAGE = 'site.storage.AlwaysOverwriteFileSystemStorage',它返回一个

错误

错误导入存储模块site.storage: “无模块命名存储”

我不熟悉Python/Django的,任何帮助将非常感激。谢谢。

+0

根据您的道路上,似乎你的项目被称为“地盘”,有一个目录中名为“存储”。确保“存储空间”中有一个空白的__init__.py文件。 – 2011-02-04 06:17:46

+0

@AbidA \ __init \ __。py – amertkara 2014-04-29 12:31:02

回答

12

你不需要把任何东西放在你的settings.py。只需在你的模型中直接使用它。例如,在您的应用所在的位置创建​​,并将其放入OverwriteStorage()。然后,你的模型看起来是这样的:

from storage import OverwriteStorage 
... 
class MyModel(models.Model): 
    ... 
    image = ImageField(upload_to='images', storage=OverwriteStorage()) 

我还使用自定义存储系统,覆盖现有文件。我​​看起来是这样的:

from django.core.files.storage import FileSystemStorage 

class OverwriteStorage(FileSystemStorage): 
    """ 
    Returns same name for existing file and deletes existing file on save. 
    """                
    def _save(self, name, content): 
     if self.exists(name): 
      self.delete(name) 
     return super(OverwriteStorage, self)._save(name, content) 

    def get_available_name(self, name): 
     return name 
5

你可以把它放在任何地方,但你应该在settings.py点的路径到那里

你可以把根文件夹此​​文件(即具有manage.py的一个),并指向路径作为storage.AlwaysOverwriteFileSystemStorage

+1

这应该是正确的接受答案,因为它解决了问题并且不会绕过它。 – Ishan 2016-06-07 09:49:20