Django计数相关对象和查询集/列表的重叠

时间:2017-05-18 11:09:12

标签: python django

说我有一个模特:

class Car(models.Model):
    name = models.CharField()
    parts = models.ManyToManyField(Part)

现在在我的Car对象(Car.objects.all())的查询集中,我想在我的id列表或部件的查询集中注释部分重叠的数量。

所以,让我说我有两个Car对象:

{
  name: 'car1',
  parts: [1,2,3,4]
}

{
  name: 'car2',
  parts: [1,5,6,7]
}

然后我希望查询的以下输出与list [1,2,3]

{
  name: 'car1',
  parts: [1,2,3,4],
  parts_overlap: 3
}

{
  name: 'car2',
  parts: [1,5,6,7],
  parts_overlap: 1
}

我需要这样,因为我想订购它。

这可能吗?

1 个答案:

答案 0 :(得分:1)

我发现了。

from django.db.models import Count, Case, When, IntegerField

queryset.annotate(parts_overlap=Count(
  Case(
    When(parts__in=list, then=1),
    output_field=IntegerField()
  )
))