Django aggregate by field with no related name -


given these models:

class user(models.model):     pass  class reward(models.model):     user = models.foreignkey(user, related_name='+') 

i trying obtain queryset contains similar:

| user    | reward__count | | 1       | 103           | | 2       | 50            | | 3       | 67            | 

conventional wisdom recommend query looking like

user.objects\     .annotate(reward__count=count('reward_set'))\     .values_list('user', 'reward__count') 

unfortunately, because related name +, neither reward_set nor rewards (if name it) qualify valid parameter count(). given situation, there no way other python loop obtain desired queryset?

for user in user.objects.all():     user_rewards = reward.objects.filter(user=user).count()     # store (user.pk, user_rewards) somewhere. 

i trying obtain queryset contains similar:

| user    | reward__count | | 1       | 103           | | 2       | 50            | | 3       | 67            | 

this can do, using aggregations on reward objects:

# fetch list of rewards, grouped rewards = reward.objects.values('user').annotate(count('id')).order_by() 

this give list this:

[     {'user': 1, 'id__count': 103},      {'user': 2, 'id__count': 50},      {'user': 3, 'id__count': 67},     ... ] 

where user user id, , id__count number of rewards associated user.


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -