Я использую DRF для создания нашего веб-приложения, ориентированного на клиента, на моей работе. У нас есть модель профиля, которая содержит ImageField
, которые представляют профиль пользователя и его фотографию соответственно. Моя работа - перестать использовать FileSystem в качестве хранилища и переключиться на s3 для хранения изображений. Я подумал, что смогу сделать это с помощью приложения django-storages
. Но я не могу понять, как заставить django-storages
работать только с одним полем в модели вместо использования его в качестве хранилища по умолчанию. Я попытался использовать FileField
с storage
, установленным на storages.backends.s3boto3.S3Boto3Storage
, но не могу сохранить файл на s3. Подводя итог моему вопросу -
- Как настроить
django-storages
в качестве хранилища только для одного поля - Как установить и получить поле в моей модели.
class Profile(models.Model):
img = ImageField(upload_to=get_directory, default='img/generic_profile.jpg')
name = CharField(max_length=256)
new_s3_field = FileField(storage=S3Boto3Storage)
profile = Profile()
profile.new_s3_field = ContentFile('sample.jpg', open('sampel.jpg') # does not work
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1079, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 1111, in execute_sql
for sql, params in self.as_sql():
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 1064, in as_sql
for obj in self.query.objs
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 1013, in pre_save_val
return field.pre_save(obj, add=True)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py", line 296, in pre_save
file.save(file.name, file.file, save=False)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py", line 93, in save
name = self.field.generate_filename(self.instance, name)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py", line 330, in generate_filename
filename = posixpath.join(dirname, filename)
File "/usr/lib/python2.7/posixpath.py", line 75, in join
if b.startswith('/'):
AttributeError: 'file' object has no attribute 'startswith'