我的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
中提供的参数。