分组和过滤django模型

时间:2017-10-04 12:20:55

标签: python django django-models

我有以下数据:

1, Red, Audi
2, Black, Audi
3, Black, BMW

我希望获得同一辆车同时具有RedBlack(并且只有它们)颜色的所有行。

在这种情况下,我希望结果为1和2,因为Audi既是Red又是Black,而不是3,因为没有Red {{1 }}

如何用django orm实现它?

BMW

2 个答案:

答案 0 :(得分:0)

您可以尝试这样做:

from django.db.models import Subquery, OuterRef, Q, Count, IntegerField


color_filter = Q(color="Red") | Q(color="Black")
cars = Car.objects.annotate(
    count=Subquery(
        Car.objects.filter(color_filter, name=OuterRef('name'))
            .values('name')
            .annotate(count=Count('name'))
            .values('count'), output_field=IntegerField()
    )
).filter(color_filter, count=2)

答案 1 :(得分:0)

我不确定这是如何(或者是否)转换为django ORM,但是如果您愿意做原始查询,这应该有效:

SELECT a.*
FROM (SELECT * FROM Car WHERE color='Black') AS a
INNER JOIN (SELECT name FROM Car WHERE color='Red') AS b
ON (a.name=b.name)