Добавление изображений статей в собственную папку

Есть приложение django (называется rigs) и возможность добавления записей на сайт через models.py. Нужно сделать так, что бы при добавлении новой записи на сайт её изобрежения помещались в новую папку с названием самой статьи. Например, я добавляю статью с названием "Bee rig" и все изображения из неё помещаются в папку под названием "Bee rig" по пути media/rigs/Bee rig/image_0.png. Есть ли возможность реализации данной задумки? Вот models.py:

class Rig(models.Model):
    title = models.CharField(max_length=100)
    text = models.TextField()
    image_0 = models.ImageField(upload_to='rigs', null=True, blank=True, default='/default_rig_image.png')
    image_1 = models.ImageField(upload_to='rigs', null=True, blank=True, default='/default_rig_image.png')
    image_2 = models.ImageField(upload_to='rigs', null=True, blank=True, default='/default_rig_image.png')
    version = models.ForeignKey(Version, on_delete=models.SET_NULL, null=True)
    is_vanila = models.BooleanField(default=True)
    price = models.DecimalField(max_digits=4, decimal_places=2, default=0.00)
    date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return(self.title)

    def get_absolute_url(self):
        return reverse('rig_detail', kwargs={'pk': self.pk})

Ответ на 1 комментарий
Сделал следующим образом:

def rig_directory_path_0(instance, filename):
    return ('{}/{}').format(instance.title, 'image_0.png')

def rig_directory_path_1(instance, filename):
    return ('{}/{}').format(instance.title, 'image_1.png')

def rig_directory_path_2(instance, filename):
    return ('{}/{}').format(instance.title, 'image_2.png')

и прописал следующие пути для моделей:

image_0 = models.ImageField(upload_to='rig_directory_path_0', null=True, blank=True, default='/default_rig_image.png')
image_1 = models.ImageField(upload_to='rig_directory_path_1', null=True, blank=True, default='/default_rig_image.png')
image_2 = models.ImageField(upload_to='rig_directory_path_2', null=True, blank=True, default='/default_rig_image.png')

Но при таком розкладе у меня в корневой папке /media создаются папки с названиями /rig_directory_path_0/ и т.д.

P.S 2
Вот верхняя часть файла views.py:

from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import Rig
from django.contrib.auth.mixins import LoginRequiredMixin

def directory_path(instance, filename):
    return ('{}/{}').format(instance.title, filename)

class ShowRigView(ListView):
    model = Rig
    template_name = 'rigs/rigs.html'
    context_object_name = 'rig'
    ordering = ['-date']
    paginate_by = 15

    def get_context_data(self, **kwards):
        ctx = super(ShowRigView, self).get_context_data(**kwards)
        ctx['title'] = 'MCStore Rigs'
        return ctx
                   ...

Вот как я сделал:
models.py:

def directory_path(instance, filename):
    return ('rigs/{}/{}').format(instance.title, filename)

Всем ImageField и FileField файлам прописал:

image_0 = models.ImageField(upload_to=directory_path, null=True, blank=True, default='/default_rig_image.png')
image_1 = models.ImageField(upload_to=directory_path, null=True, blank=True, default='/default_rig_image.png')
image_2 = models.ImageField(upload_to=directory_path, null=True, blank=True, default='/default_rig_image.png')
file = models.FileField(upload_to=directory_path, null=True, blank=True)

В итоге файлы помещаются по пути: media/rigs/{название статьи}/{название файла}


Ответы (1 шт):

Автор решения: Lothric

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

# upload_to автоматом передаёт сюда объект и имя загружаемой картинки
def directory_path(instance, filename):
    return ('{}/{}').format(instance.title, filename)

class Rig(models.Model):
    # в upload_to подставляем функцию
    image_0 = models.ImageField(upload_to=directory_path, null=True, blank=True, default='/default_rig_image.png')

Но если хотите фиксированно называть картинки image_0, image_1 и т.д., видимо придётся сделать три отдельные функции для каждого поля типа таких:

# для image_0.png
def directory_path(instance, filename):
    return ('{}/{}').format(instance.title, 'image_0.png')
→ Ссылка