Как избежать дублирования путей к изображениям, загружаемым в базу данных с помощью формы django

У меня возникла проблема с django ImageField. Точнее, с его путем загрузки и сохранением в базу данных. Я установил upload_to в нужный каталог, и он сохраняет файлы прямо туда, куда надо.

photo = models.ImageField(
        default="Person-595b40b65ba036ed117d315a.svg",
        upload_to="static/img",
    )
<
STATIC_URL = "static/"
STATICFILES_DIRS = (
    BASE_DIR / "static", "static/img",
)

Но когда дело доходит до базы данных, мои фотографии сохраняются вот так, и когда дело доходит до извлечения, django сначала идет в каталог моих статических файлов, который является static/img и ищет static/img/static/img/images.png, который точно не найден.

static/img/images.png

Итак, мой вопрос в том, как избежать дублирования путей в базе данных? Как сделать так, чтобы мои изображения загружались в указанную директорию, но появлялись в базе данных без пути, чтобы я мог получить их без каких-либо изменений в базе данных?

Заранее спасибо!!!

Ознакомьтесь с настройками Django MEDIA_URL и MEDIA_ROOT здесь. Кроме того, вы можете установить атрибут upload_to на функцию, в которой вы делаете некоторые манипуляции с путем/именем файла, например:


class Foo(models.Model):
 def image_directory_path(instance, filename):
   return f'internal/{filename}_0{self.instance.pk}'

 image = models.ImageField(
        upload_to=image_directory_path,
        height_field=None,
        width_field=None,
        max_length=100,
    )

Пользовательская функция получает instance в качестве экземпляра модели, с которым вы сейчас работаете, и filename, которое не требует пояснений - имя загружаемого файла. С помощью этого кода файл будет загружен в ваш settings.MEDIA_ROOT/internal/file.png путь

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