Система хранения файлов Django Custom - PullRequest
7 голосов
/ 04 февраля 2011

У меня есть пользовательское хранилище

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', он возвращает

Error

Ошибка при импорте модуля хранилища site.storage: «Не указан модуль с именем хранилища»

Я не знаком с Python / Django, любая помощь будет высоко ценится. Спасибо.

Ответы [ 2 ]

16 голосов
/ 05 февраля 2011

Вам не нужно ничего помещать в ваш settings.py. Просто используйте его прямо в вашей модели. Например, создайте storage.py, где бы ни находилось ваше приложение, и поместите в него OverwriteStorage(). Тогда ваша модель может выглядеть так:

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

Я также использую собственную систему хранения для перезаписи существующих файлов. Мой storage.py выглядит так:

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 голосов
/ 04 февраля 2011

Вы можете поместить его где угодно, но вы должны указать путь к нему в settings.py

Вы можете поместить этот storage.py файл в корневую папку (ту, которая имеет manage.py) и указать путь как storage.AlwaysOverwriteFileSystemStorage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...