通过字段获取不同的Queryset值 [英] Get distinct values of Queryset by field

查看:1379
本文介绍了通过字段获取不同的Queryset值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个模型:

class Visit(models.Model):
    timestamp  = models.DateTimeField(editable=False)
    ip_address = models.IPAddressField(editable=False)

用户在一天内多次访问, 如何根据ip字段过滤独特的行? (我想要今天的唯一访问)

If a user visits multiple times in one day, how can I filter for unique rows based on the ip field? (I want the unique visits for today)

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如下所示:

to get a ValuesQuerySet of just the ip fields. Now my QuerySet looks like this:

[{'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并采取db命中的情况下将其过滤为唯一性?

# Hope it's something like this...
values.distinct().count()


推荐答案

你想要的是:

Visit.objects.filter(stuff).values("ip_address").annotate(n=models.Count("pk"))

这样做是获取所有ip_addresses,然后它获得每个主键(也就是行数)的计数ip地址。

What this does is get all ip_addresses and then it gets the count of primary keys (aka number of rows) for each ip address.

这篇关于通过字段获取不同的Queryset值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆