Как разобрать имена файлов (изображений) и присвоить их модели?

Я относительно новичок в Django и создаю приложение для электронной коммерции. У меня есть папка с изображениями (они находятся в статической директории), и много товаров (~15000, я беру данные о товарах из API). К сожалению, я не извлекаю данные об изображениях из API, вместо этого у меня есть папка со всеми изображениями, и их название содержит фрагмент строки product.name.

e.g
product.name = AH 285/55 R16 Turanza AH325
image_name = Turanza__1

Я пытаюсь достичь следующего псевдокода:

if product.name (the string) is contained in the image_name(path of the image), save the image and associate it with the model, otherwise pass.
class Product(models.Model):
    code = models.CharField(primary_key=True, unique=True, max_length=15, null=False, blank=False)
    name = models.CharField(max_length=50, null=True, blank=True)
    brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, null=True, blank=True)
    price = models.FloatField(null=True, blank=True)

    image1 = ...
    image2 = ...

или

class Image(models.Model):
    product = models.ForeignKey(Product, ...)
    name = models.CharField(...)

Как бы я подошел к этому? Может быть, свойство модели? Что является лучшей практикой для решения подобной проблемы? Может ли кто-нибудь направить меня в правильном направлении?

Первое, что приходит мне в голову, это передать дополнительный параметр экземпляру модели Product при его создании, в данном случае имя файла. Что-то вроде этого

class Product(models.Model):
    code = models.CharField(primary_key=True, unique=True, max_length=15, null=False, blank=False)
    name = models.CharField(max_length=50, null=True, blank=True)
    brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, null=True, blank=True)
    price = models.FloatField(null=True, blank=True)

    image1 = ...
    image2 = ...

   @classmethod
   def create(cls, filename):
        product = cls(name=filename)
        return product

Тогда это будет работать следующим образом:

product = Product.create("filename")

Ознакомьтесь с документацией.

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