Мне нужно сгруппировать все записи по пользователю и заставить счет делать что-то вроде этого:
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 без raw?
Кажется, есть билет, который позволил бы мне делать то, что я хочу в будущем, на багтрекере, включив DISTINCT ON
: https://code.djangoproject.com/ticket/6422