我有以下模型,InvitationAccept引用GFK邀请。
我不想定义accepts
GenericRelation,因为当我删除InvitationAccept实例时,我不想要cascade delete
。
class InvitationAccept(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
invitation = generic.GenericForeignKey('content_type', 'object_id')
class Invitation(models.Model):
accepts = generic.GenericRelation(InvitationAccept)
https://docs.djangoproject.com/en/1.9/ref/contrib/contenttypes/
另请注意,如果删除具有GenericRelation的对象, 任何指向GenericForeignKey的对象都是 也被删除了。在上面的示例中,这意味着如果是书签 对象被删除,指向它的任何TaggedItem对象都是 同时删除。
但是我想得到#accepts
如果我有self.filter(user_invite=user).annotate(num_accepts=Count('accepts__id')).aggregate(Sum('num_accepts'))
字段,我可以使用accepts
。
那我怎么没有accepts
(不是级联删除)并查询上面的聚合?
答案 0 :(得分:0)
所以你想要为用户的每个邀请计算一次,对吧?也许你应该使用类似的东西:
qs = (InvitationAccept.objects
.filter(invitation__user_invite=user)
.annotate(Count('invitation', distinct=True))
.values('invitation', 'invitation__count'))