【发布时间】:2011-11-23 22:39:19
【问题描述】:
我有这个问题:
checkins = CheckinAct.objects.filter(time__range=[start, end], location=checkin.location)
这对于告诉我在特定位置的日期范围内发生了多少签入非常有用。但我想知道唯一用户完成了多少签入。所以我尝试了这个:
checkins = CheckinAct.objects.filter(time__range=[start, end], location=checkin.location).values('user').distinct()
但这不起作用,我返回一个空数组。任何想法为什么?
这是我的 CheckinAct 模型:
class CheckinAct(models.Model):
user = models.ForeignKey(User)
location = models.ForeignKey(Location)
time = models.DateTimeField()
----更新----- 所以现在我将查询更新为如下所示:
checkins = CheckinAct.objects.values('user').\
filter(time__range=[start, end], location=checkin.location).\
annotate(dcount=Count('user'))
但我仍然得到多个具有相同用户的对象,如下所示:
[{'user': 15521L}, {'user': 15521L}, {'user': 15521L}, {'user': 15521L}, {'user': 15521L}]
---- 更新 2------ 这是我尝试过的其他方法,但是当我登录 checkins 对象时,我仍然得到很多相同的用户对象。
checkins = CheckinAct.objects.filter(
time__range=[start, end],
location=checkin.location,
).annotate(dcount=Count('user')).values('user', 'dcount')
logger.info("checkins!!! : " + str(checkins))
记录以下内容:
checkins!!! : [{'user': 15521L}, {'user': 15521L}, {'user': 15521L}]
注意同一个用户对象有 3 个实例。这是否正常工作?是否有不同的方式来读取 dict 对象中返回的内容?我只需要知道在该时间范围内有多少唯一身份用户签入该特定位置。
【问题讨论】:
-
distinct只是消除了重复的结果(就像在相同的所有内容中一样,甚至是pk)。它不会使结果对于一个或另一个领域是唯一的。您可能正在寻找这个:stackoverflow.com/questions/629551/… -
感谢克里斯的评论,我想我越来越近了,感谢您为我指明了正确的方向。我已经更新了我的帖子。
标签: django django-queryset django-nonrel