我需要按用户对所有条目进行分组,并按照以下方式进行计数:
class Promotion(models.Model):
pass
class Entry(models.Model):
user = models.ForeignKey('User');
promotion = models.ForeignKey('Promotion')
def get_uniques(promotion_id):
promotion = Promotion.objects.get(promotion_id)
entries = promotion.entry_set.annotate(Count('user'))
return entries
然而,它多次返回同一个用户。在浏览StackOverflow之后我也尝试了以下内容,它似乎正在做一些我想要的事情:
promotion.entry_set.annotate(Count('user')).order_by('user')[:10]
promotion.entry_set.all().values('user').annotate(entry_count=Count('user')).order_by()
Entry.objects.filter(promotion=promotion).annotate(Count('user')).order_by('user')
基本上我正在尝试这样做,为每个用户提供一个Entry对象:
Entry.objects.raw("""
SELECT *
FROM promotion_entry
WHERE promotion_id = %s
GROUP BY user_id""", (promotion_id,))
然后我将执行第二次查询以获得条目计数,仍然不理想。我可以在没有原始的情况下进行GROUP BY吗?
通过启用DISTINCT ON
{{1}} {{1}},似乎有一张票可以让我在将来对错误跟踪器做我想做的事情:https://code.djangoproject.com/ticket/6422
答案 0 :(得分:0)
如果您想为每个用户计算条目:
promotion.entry_set.all().values('user').annotate(entry_count=Count('id')).order_by()
如果您想为每个用户使用一些条目:
promotion.entry_set.all().values('user').annotate(entry_id=Max('id')).order_by()
这将为您提供id
条目,使用__in
自行获取对象。