Как реализовать число скачиваний в Django

Есть сайт про программы разных категорий. Есть два главных шаблона: 1. Где находятся все софты; 2. Собственно страница данного софта.

В моделях софта написал поле downloads, собственно число скачиваний:

class Soft(models.Model):
    img = models.ImageField(verbose_name='Фото софта')
    title = models.CharField(max_length=60, verbose_name='Название софта')
    published = models.DateField(auto_now_add=True, db_index=True, verbose_name='Опубликовано')
    category = models.ForeignKey('Category', null=True, on_delete=models.PROTECT, verbose_name='Категория')
    downloads = models.IntegerField(null=True, blank=True, verbose_name='Скачивания')
    content = models.TextField(null=True, blank=True, verbose_name='Описание')
    file = models.FileField(null=True, blank=True, upload_to='files/', verbose_name='Файл софта')

    class Meta:
        verbose_name = 'Софт'
        verbose_name_plural = 'Софты'
        ordering = ['-published']

Не понимаю как это сделать. Подумал, может на js, написал простой скрипт, но и он неправильно работает, просто в js не очень шарю.

Может помочь кто-нибудь, заранее всем спасибо. Если что-то еще нужно будет обязательно скину(фотку, код и т.д.)


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

Автор решения: Roman Konoval

В view, которое обрабатывает запросы на скачивание, нужно добавить увеличение счетчика скачиваний:

soft = Soft.objects.filter(id=<уникальный идентификатор из запроса>)
soft.update(downloads=F('downloads') + 1)

Обратите внимание, что в filter нужно передать предикат, который однозначно идентифицирует soft. Из модели в описании неочевидно, как это происходит. Тут я для примера использовал поле id, которого сейчас в модели нет.

→ Ссылка