#django #django-models
Вопрос:
Я относительно новичок в Django и создаю приложение для электронной коммерции. У меня есть папка с изображениями (они находятся в статическом каталоге) и множеством продуктов (~ 15000, я извлекаю данные продукта из API.). К сожалению, я не извлекаю данные изображения из API, вместо этого у меня есть папка со всеми изображениями, и их имя содержитфрагмент product.name струна.
e.g
product.name = AH 285/55 R16 Turanza AH325
image_path = static/products/images/Turanza__1.png
Чего я пытаюсь добиться, так это следующего псевдокода:
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(...)
Как бы я подошел к этому? Может быть, свойство модели? Какова наилучшая практика для решения подобной проблемы? Может кто-нибудь указать мне правильное направление?
Ответ №1:
Первое, что приходит мне в голову, это передать дополнительный параметр экземпляру модели продукта при его создании, в данном случае имя файла. Что-то вроде этого
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")
Ознакомьтесь с документацией.