Как избежать дублирования путей к изображениям, загружаемым в базу данных с помощью формы 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
путь