Get distinct values of Queryset by field

With Alex Answer I also have the n:1 for each item. Even with a distinct() clause.

It's weird because this is returning the good numbers of items :

Visit.objects.filter(stuff).values("ip_address").distinct().count()

But when I iterate over "Visit.objects.filter(stuff).values("ip_address").distinct()" I got much more items and some duplicates...

EDIT :

The filter clause was causing me troubles. I was filtering with another table field and a SQL JOIN was made that was breaking the distinct stuff. I used this hint to see the query that was really used :

q=Visit.objects.filter(myothertable__field=x).values("ip_address").distinct().count()
print q.query

I then reverted the class on witch I was making the query and the filter to have a join that doesn't rely on any "Visit" id.

hope this helps


What you want is:

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

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.