django - 如何不计算 Django ORM 中同一用户在一天内创建的对象?
问题描述
我有一个模型Product
,User
我想生成产品视图的统计信息(想法是实现视图计数)。我创建了一个名为ProductViewed
和信号的新模型,每当我get
请求检索单个Product
. 我知道如何获取每个Product
. 但是我想让统计数据公平,我想在一天内删除由同一用户或 IP 地址生成的每个视图。
产品查看模型
class ProductViewed(models.Model):
user = models.ForeignKey(
get_user_model(), on_delete=models.CASCADE, blank=True, null=True, related_name="viewed")
ip_address = models.CharField(max_length=255, blank=True, null=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'{str(self.product)} viewed on {self.created_at}'
class Meta:
ordering = ('-created_at', )
verbose_name_plural = "ProductViewed"
我正在使用的查询如下:
ProductViewed.objects.filter(product_id=<someid>).count()
我想实现这个
# before filtering
Pr1 viewed on 08.07.2020 by user1, Pr1 viewed on 08.07.2020 by user1, Pr1 viewed on 08.07.2020 by user2
# after filtering
Pr1 viewed on 08.07.2020 by user1, Pr1 viewed on 08.07.2020 by user2
问题:如何删除同一用户一天内查看的产品?
解决方案
你可以使用distinct()
. 您可以将现有字段添加到值中。
ProductViewed.objects.filter(product_id=<someid>).values("user", "ip_address", "created_at__date").distinct().count()
推荐阅读
- javascript - 如何检测 React App 中更改的单选按钮
- python - 熊猫处理没有循环的溢出
- blender - Blender 2.93.3 和动画节点插件的恐慌
- java - EJB 托管 bean 父级,在构造函数中带有参数
- spring-boot - 返回列表到控制器 Springboot Thymeleaf
- ios - 未找到 -lFirebaseCore 的 XCode 离子库
- python - 了解匿名函数 lambda 的返回类型
- apache - 使用 Apache httpd 和 AWS ELB 进行 301 重定向
- arrays - 使用 MongoDB 更新文档数组中的多个值的最佳方法是什么?
- python - 当我以管理员身份尝试删除与 Django 应用程序中的另一个对象相关的对象时,如何解决发生的错误?