分组依据和筛选Django mod

2024-04-26 21:08:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据:

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

我想得到同一辆车的所有既有RedBlack(而且只有它们)颜色的行。在

在本例中,我期望结果是1和2,因为Audi同时是Red和{},但不是3,因为没有RedBMW。在

如何使用django orm实现它?在

^{pr2}$

Tags: 数据django颜色ormredblackaudi本例
2条回答

您可以尝试这样的方法:

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)

我不确定如何(或是否)将其转换为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)

相关问题 更多 >