加入带注释的查询集

时间:2016-08-05 17:00:30

标签: django django-orm

问题

我的Django模型布局如下:

class Event(models.Model):
    …

class Participation(models.Model):
    event = models.ForeignKey(Event)
    …

class Rating(models.Model):
    participation = models.ForeignKey(Event)
    …

class Item(models.Model):
    event = models.ForeignKey(Event)
    …
Event <-- Participation
 ^         ^
 |         |
Item <-- Rating

Item上有一个自定义manager,其中一个方法返回annotated queryset一些计算,conditional expressions基于相关Rating个对象,这样的(比如一个叫mean_rating的字段)。这些结果可以在专门的观点中看到。

我的目标是创建另一个视图,该视图显示Participation个对象的列表,但查询集与我的自定义ItemManager中的一个查询集相连,这使我可以访问{{1}上的注释字段查询集也是如此:

Item

我对此的看法

我尝试将Prefetch对象与自定义查询集一起使用,这会通过在Python中加入查询集来使注释字段可用(即Participation.objects.annotate( rating_count=Count(rating), sum_of_mean_rating=Sum(F("mean_rating")) # field on ItemQueryset ) 有效),但我想加入它们用于附加注释的数据库。

我还考虑过使用自定义base manager(与默认管理器相对)也可以处理关系。但是object.related_object.annotated_field是经过筛选的,其管理员方法需要一个我无法在ItemQuerySet中提供的参数。

0 个答案:

没有答案