Как изменить название картинки, которое Django даёт ей по умолчанию при загрузке через ImageField?

Чтобы изменить название картинки, которое Django дает ей по умолчанию при загрузке через ImageField, вам понадобится создать функцию, которая будет вызываться в момент сохранения модели. В этой функции вы можете изменить имя файла, используя метод os.path, и затем сохранить его в поле ImageField.

Вот пример подробного объяснения, как это сделать.

1. Создайте функцию, которая будет вызываться в момент сохранения модели. Вы можете использовать метод @receiver декоратора pre_save, который будет автоматически вызывать вашу функцию перед сохранением модели.

from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
import os

@receiver(pre_save, sender=YourModelName)
def change_image_filename(sender, instance, **kwargs):
    # Проверяем, загружено ли изображение
    if instance.image:
        # Получаем имя файла
        filename = os.path.basename(instance.image.name)
        # Генерируем новое имя файла (делаем изменения, которые вам нужны)
        new_filename = 'new_image_name' + os.path.splitext(filename)[1]
        # Проверяем, существует ли файл с новым именем, если да, добавляем случайный хэш для уникальности
        while default_storage.exists(new_filename):
            new_filename = 'new_image_name' + '_' + get_random_hash() + os.path.splitext(filename)[1]
        # Открываем файл и сохраняем его с новым именем
        with default_storage.open(instance.image.name, 'rb') as old_file:
            new_file = ContentFile(old_file.read())
            instance.image.save(new_filename, new_file, save=False)

2. Важно обратить внимание, что мы используем instance.image.name для получения имени загруженного файла из поля ImageField. Затем мы используем модуль os.path для получения имени файла и его расширения.
3. Мы генерируем новое имя файла, добавляя к исходному имени какие-либо изменения, которые вам нужны. В данном примере мы добавляем "new_image_name" перед расширением файла.
4. Затем мы проверяем, существует ли уже файл с таким именем. Если да, мы добавляем случайный хэш, чтобы обеспечить уникальность.
5. Наконец, мы открываем исходный файл, читаем его содержимое и сохраняем его с новым именем с использованием instance.image.save.

Это исходный пример функции, которая будет вызываться при сохранении модели для изменения имени файла, но вы можете изменить этот код и добавить любые другие изменения, которые вам нужны.