Общее количество загрузок для элемента в Django

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

МОДЕЛЬ:

upload = models.FileField(upload_to ='uploads/')
downloads = models.ManyToManyField(User, related_name='post_download')

URL:

path('downloads/<int:pk>', DownloadView, name= 'download_post'),

VIEW:

def DownloadView(request, pk):
    post = get_object_or_404(Item, id=request.POST.get('item_id'))
    post.downloads.add(request.user)
    return HttpResponseRedirect(reverse('item_detail', args=[str(pk)]))

ШАБЛОН:

<div class="flex items-center justify-center">
            <a href="{{item.upload.url}} " class="text-white w-full  text-center bg-black p-4 rounded-lg mt-8 hover:bg-gray-800"><button>Download this file | <span class="text-xs text-green-400">{{object.upload.size|filesizeformat}}</span></button></a>
        </div>

Простым решением было бы добавить в вашу модель поле модели, указывающее общее количество скачиваний для каждого объекта, как например:

class MyModel(models.Model):
    ....
    download_count = models.PositiveIntegerField(default=0, blank=False, 
    null=False)
    
    def increment_download_count(self):
        """ Increments download_count of an instance by 1"""
        self.download_count += 1

Далее, по вашему мнению, нужно добавить что-то в этом роде, чтобы увеличить счетчик загрузок для текущего объекта.

def DownloadView(request, pk):
    post = get_object_or_404(Item, id=request.POST.get('item_id'))
    post.downloads.add(request.user)
    post.increment_download_count()
    return HttpResponseRedirect(reverse('item_detail', args=[str(pk)]))

В вашем шаблоне вы можете отобразить текущее количество загрузок, сделав:

{{obj.download_count}}
Вернуться на верх