django - 如何在 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
解决方案
您可以get_object
通过将模型文件添加到您需要的视图计数的模型中来使用 DetailView 类中的方法view_count
,然后您可以在该模型详细视图中使用以下代码。
class PostDetailView(DetailView):
......
......
def get_object(self):
obj = super().get_object()
obj.view_count += 1
obj.save()
return obj
推荐阅读
- typescript - 类型 '' 没有调用签名.ts(2349) && 类型 '' 必须有一个返回 iterator.ts(2488) 的 '[Symbol.iterator]()' 方法
- javascript - 地图的 Discord.js 问题
- git - 在作业配置中的 Jenkins 管道上使用相同的凭据
- powerbi - 度量中的 DAX 过滤器
- firebase - firestore 安全规则 - 如何打印出规则值?
- sql - 为什么将 64 添加到类型转换转换的末尾?
- python - 堆叠卷积和 LSTM 层的问题
- firebase - Firestore 上传并调整图片大小并获取压缩图片下载 url
- fft - Sympy 傅里叶变换
- email - 如何将退订信息用于交易和营销电子邮件?