Различные урлы загрузки и выгрузки для поля изображения Django Models
Мне нужен способ иметь разные URL для загрузки и выгрузки для ImageField. Я хочу загружать изображение на AWS S3 и при доступе к изображению я хочу, чтобы изображение маршрутизировалось через CDN (в моем случае Fastly).
def get_avatar_upload_path(identity, filename):
file_ext = filename.split('.')[-1]
file_name = f'{uuid.uuid4()}.{file_ext}'
return f'{settings.AWS_MEDIA_PREFIX}{identity.uuid}/{file_name}'
class Identity(identity_revision_base):
"""
Identity model. Ties a user to a chat identity.
"""
badges = models.ManyToManyField(Badge, blank=True)
key = models.UUIDField(_("key"), unique=True, default=uuid.uuid4)
uuid = models.UUIDField(_("UUID"), unique=True, default=uuid.uuid4)
avatar = models.ImageField(upload_to=get_avatar_upload_path, blank=True)
user = models.ForeignKey(
to=settings.AUTH_USER_MODEL,
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name="+",
)
Так же, как я указываю путь загрузки в ImageField, я хотел бы найти способ сделать что-то подобное для доступа к Image. Также кажется, что я не могу изменить avatar.url после его создания. Есть ли какой-нибудь способ обойти это?
Вы проверяли django-storages? Он заботится о загрузке в хранилище объектов и возвращает URL CDN для загрузки. Fastly совместим с S3, поэтому он должен работать.
В общем случае вы также можете использовать методы модели с декоратором свойств для получения пользовательского вычисляемого значения из экземпляров модели.