Как реализовать число скачиваний в 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 шт):
В view, которое обрабатывает запросы на скачивание, нужно добавить увеличение счетчика скачиваний:
soft = Soft.objects.filter(id=<уникальный идентификатор из запроса>)
soft.update(downloads=F('downloads') + 1)
Обратите внимание, что в filter нужно передать предикат, который однозначно идентифицирует soft. Из модели в описании неочевидно, как это происходит. Тут я для примера использовал поле id, которого сейчас в модели нет.