Получение предписанных S3 url для медиа в Django

Мы используем django rest framework для проекта и здесь мы пытаемся избежать использования сериализаторов. Наш AWS S3 является частным, поэтому нам необходимо предоставить пользователю ключ с предварительной подписью, чтобы он мог видеть изображение. Изначально наш S3 был публичным, поэтому мы использовали функцию annotate для преобразования пути к изображению в ссылку на изображение следующим образом :

def getImageFormatter(key:str)->Func:
"""Function to Get Formatted URL"""
return Case(
    When(
        **{f'{key}__exact':''},
        then=Value(None)
        ),
    When(
        **{f'{key}__isnull':False},
        then=Concat(
            Value(settings.MEDIA_ROOT),
            F(key),output_field=CharField()
        )
    ),
    default=Value(None),
    output_field=CharField(null=True)
    )

Проблема в том, что это работает только для публичного S3. Как сделать так, чтобы мы могли получить изображение на аннотации? Например, использовать пользовательскую функцию django db или что-то еще? Любая подсказка будет оценена по достоинству .

Используемая нами база данных - PostgreSQL. Мы используем boto3 и django-storages для подключения к нашему s3 bucket.

На самом деле мы не пытаемся прогнать его через сериализатор, а получаем данные напрямую, используя annotate и values.

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