Различные урлы загрузки и выгрузки для поля изображения 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, поэтому он должен работать.

В общем случае вы также можете использовать методы модели с декоратором свойств для получения пользовательского вычисляемого значения из экземпляров модели.

Вернуться на верх