Django - подсчитать количество одинаковых полей в модели - PullRequest
0 голосов
/ 04 февраля 2020

Я новичок в Django и создаю сайт электронной коммерции (db: sqlite3). Каждый предмет в продаже имеет 1-5 загруженных изображений. Итак, у меня есть модель здесь:

class Item(models.Model):
    '''Item model with maximum 5 images uploaded'''

    <--snip-->

    image_1 = models.ImageField(upload_to='items/')
    image_2 = models.ImageField(upload_to='items/', blank=True)
    image_3 = models.ImageField(upload_to='items/', blank=True)
    image_4 = models.ImageField(upload_to='items/', blank=True)
    image_5 = models.ImageField(upload_to='items/', blank=True)

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

Поэтому мой вопрос:
1. есть ли лучше способ создать ImageField, более динамичный c способ?
2. возможно ли узнать количество одинаковых полей в модели, которые не являются пустыми?

1 Ответ

1 голос
/ 04 февраля 2020

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

class ItemImage(models.Model):
    item = models.ForeignKey(Item)
    image = models.ImageField(upload_to='items/')

class Item(models.Model):
    <--snip-->

    # we add a model property then do a reverse lookup in order to 
    # count images linked to the item object
    # this can then be accessed by item_obj.image_count
    @property
    def get_image_count(self)
        return self.itemimage_set.all().count()
...