Установить изображение по умолчанию на модель из ведра s3

Для профилей пользователей у меня есть изображение по умолчанию на модели

image = models.ImageField(default='default.jpg', upload_to='profile_pics')

Теперь у меня есть это изображение в ведре s3. Как я могу сослаться на это изображение из ведра s3, а не локально

?

Если я пытаюсь использовать прямой путь изображения на модели https://uploadfiles.s3.amazonaws.com/profile_pics/default.jpg или путь ковша 'uploadfiles/profile_pics/default.jpg, я получаю ошибку This backend doesn't support absolute paths

Я не уверен, как еще я мог бы сослаться на изображение У меня есть надлежащий доступ к buckets и загрузка работает правильно

Попробуйте сделать что-то вроде этого, чтобы создать абсолютный uri к изображению, остальное просто затем bucket policy stuff на S3.

from django.contrib.sites.models import Site
from urllib.parse import urljoin
from django.utils.encoding import iri_to_uri

def build_absolute_uri(location):
    # type: (str) -> str
    host = Site.objects.get_current().domain
    protocol = "https" if settings.ENABLE_SSL else "http"
    current_uri = "%s://%s" % (protocol, host)
    location = urljoin(current_uri, location)
    return iri_to_uri(location)


@celery_app.task()
def send_expense_record(id):
    send_kwargs, ctx = get_email_context()
    expense = Expense.objects.get(pk=id)
    imagelink = build_absolute_uri(expense.image.url)
    ctx["imagelink"] = imagelink
    email = send_templated_mail(
     template_name="property/expense",
     recipient_list=settings.ADMINS,
     context=ctx,
        **send_kwargs,
    )

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