说我有一个模特:
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
}
我需要这样,因为我想订购它。
这可能吗?
答案 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()
)
))