Общее количество загрузок для элемента в 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}}