跳转到主要内容

为通用相关数据提供annotate()和aggregate()

项目描述

annotate()和aggregate()用于通用相关数据。同时,还提供了一个方便的函数用于过滤GFK-model查询集。

尽可能使用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”开头的所有食物的平均评分(generic_aggregate)

food_qs = Food.objects.filter(name__startswith='a')
generic_aggregate(food_qs, Rating, Avg('ratings__rating'))

您只想显示以“a”开头的食物的评分(generic_filter)

food_qs = Food.objects.filter(name__startswith=’a’)
generic_filter(Rating.objects.all(), food_qs)

文档

http://django-generic-aggregation.readthedocs.org/

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

django-generic-aggregation-0.4.0.tar.gz (7.2 kB 查看哈希值)

上传时间: 源代码

由以下机构支持