Хранение нескольких изображений для каждого объекта сущности в Django с помощью SQLite - PullRequest
0 голосов
/ 20 июня 2020

В настоящее время я создаю веб-сайт, на котором я могу хранить информацию о недавно выпущенных аппаратных частях (например, материнская плата, процессор и т. Д. c.)

Я супер новичок в веб-разработке, и вот мой код фрагмент текущей модели базы данных.

class Manufacturer(models.Model):
    name = models.CharField(max_length=264, unique=True)

class Hardware(models.Model):
    manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)

    name = models.CharField(max_length=264, unique=True)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    release_date = models.DateField(default=datetime.date.today)
    image = models.ImageField(null=True, blank=True)

    class Meta:
        abstract = True

Итак, таким образом я мог бы хранить ноль или одно изображение для каждого объекта, но не уверен, как я могу заставить его хранить от 0 до большего количества изображений для каждого.

Кажется, что PostgreSQL действительно поддерживает ArrayField, но, поскольку я использую SQLite, я не могу придумать лучший способ добиться этого.

1 Ответ

0 голосов
/ 20 июня 2020

Если вы хотите сохранить несколько изображений для одного объекта MultiImage, лучший способ сделать это - создать отдельную модель изображения (где вы будете хранить все изображения), а затем направить их обратно на экземпляр MultiImage с помощью внешний ключ. Это будет выглядеть примерно так:

class Image(models.Model):
    # add in anything else you want here 
    image = models.ImageField((upload_to='media/')
    multiImage = models.ForeignKey(Hardware, on_delete=models.CASCADE, related_name='other_images')

Это будет означать, что каждое создаваемое вами изображение «указывает» на экземпляр MultiImage. Свойство related_name позволяет получить все необходимые изображения. Например:

multi_image_instance = Hardware.objects.get(id=...) # or get_object_or_404(Hardware, id=...)
images = multi_image_instance.other_images.all() # this will return a QuerySet

В подробном представлении вы можете сделать что-то вроде получения всех изображений в шаблоне:

{% for image in images %}
    <img src={{ image.image.url }} />
{% endfor %}
...