【问题标题】:Django Count overlap of related objects and queryset/listDjango Count 相关对象和查询集/列表的重叠
【发布时间】:2017-05-18 11:09:12
【问题描述】:

假设我有一个模型:

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

现在在我的汽车对象查询集中 (Car.objects.all()) 我想在我的 id 列表或我的零件查询集中注释零件的重叠计数。

假设我有两个 Car 对象:

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

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

然后我想从我的查询中得到以下输出列表 [1,2,3]

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

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

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

这可能吗?

【问题讨论】:

  • 你能再解释一下吗?注释是什么意思?可能是您想要的示例输出也会有所帮助。
  • @gipsy 我添加了一个更清晰的例子
  • @gipsy 注释我的意思是 Django ORM 的函数注释。

标签: python django


【解决方案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()
  )
))

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多