大家好,我正在尝试执行以下查询:
SELECT *
FROM dashboard_informe inf
INNER JOIN dashboard_servicio serv ON inf.servicio_id = serv.id
WHERE serv.nombre LIKE 'Inventario' AND inf.nombre LIKE 'Inventario%'
我不知道该怎么做,我尝试过:
b = Servicio.objects.all().values_list('id')
r = Informe.objects.filter(servicio_id=b)
这给了我一个错误:“用于精确查找的QuerySet值必须限制为' ValueError:用于精确查找的QuerySet值必须使用切片限制为一个结果。
有某种方法可以做到吗?还是最好用该查询创建存储过程?
致谢!
答案 0 :(得分:3)
我认为您正在寻找__in
field lookup:
b = Servicio.objects.filter(nombre__startswith='Inventario').values('id')
r = Informe.objects.filter(servicio_id__in=b)
Django将第一个查询转换为子查询,从而导致SQL看起来像这样:
SELECT ...
FROM dashboard_informe inf
WHERE inf.id IN (
SELECT s.id
FROM dashboard_servicio s
WHERE s.nombre LIKE 'Inventario%'
);
答案 1 :(得分:0)
SELECT *
FROM dashboard_informe inf
INNER JOIN dashboard_servicio serv ON inf.servicio_id = serv.id
WHERE serv.nombre LIKE 'Inventario' AND inf.nombre LIKE 'Inventario%'
r = Informe.objects.filter(servicio__nombre='Inventario', nombre__startswith='Inventario')
答案 2 :(得分:-1)
更好地使用values_list()
b = Servicio.objects.all().values_list('id', flat=True)
r = Informe.objects.filter(servicio_id__in=b)