我有这个模型:
class Visit(models.Model):
timestamp = models.DateTimeField(editable=False)
ip_address = models.IPAddressField(editable=False)
如果用户在一天内多次访问,我如何根据 ip 字段筛选唯一行?(我想要今天的唯一访问)
today = datetime.datetime.today()
yesterday = datetime.datetime.today() - datetime.timedelta(days=1)
visits = Visit.objects.filter(timestamp__range=(yesterday, today)) #.something?
编辑:
我看到我可以使用:
Visit.objects.filter(timestamp__range=(yesterday, today)).values('ip_address')
获取仅包含 ip 字段的 ValuesQuerySet。现在我的 QuerySet 看起来像这样:
[{'ip_address': u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}, {'ip_address':
u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}]
如何在不评估 QuerySet 和进行数据库命中的情况下过滤它的唯一性?
# Hope it's something like this...
values.distinct().count()
最佳答案
你想要的是:
Visit.objects.filter(stuff).values("ip_address").annotate(n=models.Count("pk"))
它所做的是获取所有 ip_addresses,然后获取每个 ip 地址的主键计数(也称为行数)。
关于django - 按字段获取 Queryset 的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432673/