annotate() and aggregate() for generically related data
Project description
annotate() and aggregate() for generically-related data. also a handy function for filtering GFK-model querysets.
the use of annotate() and aggregate() require a GenericRelation.
Examples
You want the most commented on blog entries:
>>> from django.contrib.comments.models import Comment >>> from django.db.models import Count >>> from blog.models import BlogEntry >>> from generic_aggregation import generic_annotate >>> annotated = generic_annotate(BlogEntry.objects.all(), Comment, Count('comments__id')) >>> for entry in annotated: ... print entry.title, entry.score The most popular 5 The second best 4 Nobody commented 0
You want to figure out which items are highest rated:
from django.db.models import Sum, Avg # assume a Food model and a generic Rating model apple = Food.objects.create(name='apple') # create some ratings on the food Rating.objects.create(content_object=apple, rating=3) Rating.objects.create(content_object=apple, rating=5) Rating.objects.create(content_object=apple, rating=7) >>> aggregate = generic_aggregate(Food, Rating, Sum('ratings__rating')) >>> print aggregate 15 >>> aggregate = generic_aggregate(Food, Rating.objects.all(), Avg('ratings__rating')) >>> print aggregate 5
You want to only display ratings for comments made on a given site:
>>> from django.contrib.comments.models import Comment >>> from generic_aggregation import generic_filter >>> ratings = Rating.objects.all() # <--- grab all the ratings >>> comments = Comment.objects.filter(site=Site.objects.get_current()) >>> siteified_ratings = generic_filter(ratings, comments)
Check the tests - there are more examples there. Tested with postgres & sqlite
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Close
Hashes for django-generic-aggregation-0.3.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e5b48520fe6916701febf3d4c079863c846d3847a633eea92031f395cf8340fa |
|
MD5 | e2262c279e2d80b88c22e268636109ed |
|
BLAKE2b-256 | f745b846b7c2fbc0a8543ff065b772fcc9e946808b9ce839bbee7a68a6e463ae |