简体   繁体   English

Django Count相关对象和queryset / list的重叠

[英]Django Count overlap of related objects and queryset/list

Say I have a model: 说我有一个模型:

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

Now in my queryset of Car objects (Car.objects.all()) I want to annotate the count of overlap of parts in my list of ids or my queryset of Parts. 现在,在我的Car对象查询集中(Car.objects.all())中,我要注释ID列表或零件查询集中的零件重叠计数。

So let's say I have two Car objects: 假设我有两个Car对象:

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

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

Then I want the following output from my query with list [1,2,3] 然后,我希望从列表[1,2,3]的查询中获得以下输出

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

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

I need ti like this because I want to order_by it. 我需要这样的ti,因为我想订购它。

Is this possible? 这可能吗?

I found it out. 我发现了。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM