Учитывая, что вы определили местоположение своего ведра в параметрах .MYMODEL_FILES_LOCATION вы можете использовать следующее, чтобы переименовать загруженные файлы в произвольном месте, возможно, полученное из исходного имени файла. Следующий фрагмент сохранит файлы в/mymodelfiles /. Свойства экземпляра модели могут быть доступны из объекта экземпляра в методе переименования, так что вы можете, например, загружать файлы у одного и того же пользователя под одним и тем же подкаталогом.
import uuid
import os
from django.utils.deconstruct import deconstructible
from storages.backends.s3boto import S3BotoStorage
from django.db import models
from django.conf import settings
def path_and_rename(prefix, filename):
ext = filename.split('.')[-1]
filename = '{}.{}'.format(uuid.uuid4().hex, ext)
return os.path.join(prefix, filename)
def get_path_for_my_model_file(instance, filename):
return path_and_rename('mymodelfiles/', filename)
@deconstructible
class MyS3BotoStorage(S3BotoStorage):
pass
class MyModel(models.Model):
resources = models.FileField(
upload_to=get_path_for_my_model_file,
storage=MyS3BotoStorage(bucket=settings.MYMODEL_FILES_LOCATION))
Конструктор S3BotoStorage может принимать аргумент ключевого слова «аКЛ», чтобы установить разрешения для загруженного файла, например, acl = 'private'
Показать код, который вы говорите «не работает». – mootmoot