Python 如何将having子句添加到queryset而不添加注释?

Python 如何将having子句添加到queryset而不添加注释?,python,django,django-queryset,Python,Django,Django Queryset,你好,我有这个查询集: visitas = Visitas_Paciente.objects.filter(fecha__range= g.get('fecha_inicio'), g.get('fecha_fin'))).values('paciente_id').annotate(numeros= Sum('numero')).filter(qNumeroVisitas).order_by('numeros') 使用此sql等效项: SELECT `ES_visitas_pacient

你好,我有这个查询集:

visitas = 
Visitas_Paciente.objects.filter(fecha__range= g.get('fecha_inicio'), 
g.get('fecha_fin'))).values('paciente_id').annotate(numeros=
Sum('numero')).filter(qNumeroVisitas).order_by('numeros')
使用此sql等效项:

SELECT `ES_visitas_paciente`.`paciente_id`, 
SUM(`ES_visitas_paciente`.`numero`) AS `numeros` FROM 
`ES_visitas_paciente` WHERE `ES_visitas_paciente`.`fecha` 
BETWEEN 2012-01-01 AND 2013-01-01 GROUP BY 
`ES_visitas_paciente`.`paciente_id` HAVING 
SUM(`ES_visitas_paciente`.`numero`) >= 4 ORDER BY `numeros` ASC
问题是我不需要'numeros'列,我只需要id,类似于以下查询:

SELECT
`ES_visitas_paciente`.`paciente_id` 
FROM `ES_visitas_paciente`
WHERE `ES_visitas_paciente`.`fecha` BETWEEN '2012-01-01' AND '2013-01-01'
GROUP BY `ES_visitas_paciente`.`paciente_id`
HAVING SUM(`ES_visitas_paciente`.`numero`) > 4

请帮助我:(

基本上我们需要限制选择。我们可以通过添加额外的
.values(paciente\u id)
来实现这一点 在此之后,我们将有

visitas = Visitas_Paciente.objects.filter(
    fecha__range=(g.get('fecha_inicio'),g.get('fecha_fin'))
).values(
    'paciente_id'
).annotate(
    numeros=Sum('numero')
).filte‌​r(
    numeros > 4
).orde‌​r_by(
    'numeros'
).values(
    'paciente_id'
)
我们到了

  • 按fecha(日期)过滤
  • 按paciente_id创建组
  • 按组求和()
  • 按numeros>4对其进行过滤
  • 点吧
  • 而我们只能得到“paciente_id”
  • 小心-有两个值(“paciente_id”)语句


    希望有帮助!

    我不确定它是否有帮助,但值得一提的是:有“延迟”功能,它不会将定义的字段添加到您的select查询中。感谢您的回答,但它不起作用,它说:当我尝试此操作时,Visitas\u Paciente没有名为“numeros”的字段:Visitas=Visitas.defer(“numeros”)好的,我想我有一些东西-添加
    .values('paciente\u id'))
    产生此sql查询:从
    ES\u visitas\u paciente
    中选择
    ES\u visitas\u paciente
    其中
    ES\u visitas\u paciente
    fecha
    在'2012-01-01'和'2013-01-01'之间的
    ES\u visitas\u paciente
    组(
    ES_visitas_paciente
    numero
    )>=4个求和顺序(
    ES_visitas_paciente
    numero
    )ASC…问题是分组依据,只返回一个结果。对不起,我重新阅读了问题,它看起来是您想要的…不是?