首页 > 解决方案 > 如何在 Django 中跟踪用户对帖子的浏览量?

问题描述

ObjectViewed 模型用于跟踪用户在帖子中的视图。我正在尝试过滤作者特定帖子的查看次数

            models.py
class ObjectViewed(models.Model):
    user            =       models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
    ip_address      =       models.CharField(max_length=220, blank=True, null=True)
    content_type    =       models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id       =       models.PositiveIntegerField() # User id, Blog id, or any other models id
    content_object  =       GenericForeignKey('content_type', 'object_id')
    timestamp       =       models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s viewed by %s on %s' %(self.content_object, self.user, self.timestamp)

views.py
class PostDetailView(DetailView):
    model       =       Post
    template_name=      'edmin/post/postDetail.html'
    context_object_name='posts'

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        post=Post.objects.filter(author=self.request.user)
        content_type = ContentType.objects.get_for_model(Post)
        print(content_type)
        context['obj_view'] = ObjectViewed.objects.filter(content_type=content_type,
object_id=self.request.user.id)
        print(context['obj_view'])
        return context

标签: django

解决方案


您可以get_object通过将模型文件添加到您需要的视图计数的模型中来使用 DetailView 类中的方法view_count,然后您可以在该模型详细视图中使用以下代码。

class PostDetailView(DetailView):
    ......
    ......
   def get_object(self):
        obj = super().get_object()
        obj.view_count += 1
        obj.save()
        return obj

推荐阅读