泛型相关数据的annotate()和aggregate()
django-generic-aggregation的Python项目详细描述
泛型相关数据的annotate()和aggregate()。也是一个方便的功能 用于筛选gfk模型查询集。
尽可能使用django的GenericRelation, 因为这可以通过使用join而不是 而不是子查询。
安装
# install from pypi pip install django-generic-aggregation # or install via git pip install -e git+git://github.com/coleifer/django-generic-aggregation.git#egg=generic_aggregation
示例
下面的示例假设以下简单模型:
class Rating(models.Model): rating = models.IntegerField() object_id = models.IntegerField() content_type = models.ForeignKey(ContentType) content_object = GenericForeignKey(ct_field='content_type', fk_field='object_id') class Food(models.Model): name = models.CharField(max_length=50) ratings = generic.GenericRelation(Rating) # reverse generic relation
您想知道哪些项目的评分最高(generic_annotate)
from django.db.models import Avg food_qs = Food.objects.filter(name__startswith='a') generic_annotate(food_qs, Rating, Avg('ratings__rating')) # you can mix and match queryset / model generic_annotate(food_qs, Rating.objects.all(), Avg('ratings__rating'))
您希望所有以“A”(通用的聚合)开头的食物的平均评分
food_qs = Food.objects.filter(name__startswith='a') generic_aggregate(food_qs, Rating, Avg('ratings__rating'))
您只想显示以“A”(通用过滤器)开头的食品的评级。
food_qs = Food.objects.filter(name__startswith=’a’) generic_filter(Rating.objects.all(), food_qs)