【问题标题】:Total download count for an item in DjangoDjango 中某个项目的总下载次数
【发布时间】:2021-12-05 10:42:49
【问题描述】:

我正在创建一个用户可以下载免费赠品的网站。我想记录每个项目的总下载量,然后在我的后端显示这个值。目前,我正在使用此功能允许用户从静态文件夹中下载文件。

型号:

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

网址:

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

查看:

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>

【问题讨论】:

  • 也许您可以在模型上为其创建一个字段,在模板上下文中加载它,并在单击下载按钮时使用 Javascript 对数据库进行 Ajax 调用,从而更新该字段。跨度>
  • 我猜它是每个模型实例一个 upload,所以你会为该模型添加一个计数器并在收到 DL 请求时增加它。

标签: django counter downloadfile


【解决方案1】:

简单的解决方案是在模型中添加一个模型字段,指示每个对象的下载总数,如下所示:

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}}

【讨论】:

  • 非常感谢。但是这个用于下载的新模型字段不会与用户模型链接,因为我想要在后端实现的功能之一是还可以知道哪个用户下载了该项目。
  • 在这种情况下,您应该保持逻辑不变。在您的项目模型中,您应该添加属性以显示项目的当前下载计数,如下所示:@property def download_count(self): self.downloads.all().count() 然后通过执行 {{obj.download_count}} 在您的模板中调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多