Subquery and FieldError: Expression contains mixed types. You must set output_field.

985 views
Skip to first unread message

Fabio Andrés García Sánchez

unread,
Apr 2, 2018, 2:38:38 PM4/2/18
to Django users
Hi!

What I am trying to do is filtering using queryset, get a value when verified is true. It works fine when:

mano_obra = HoraHojaTrabajo.objects.values('literal__proyecto__id_proyecto').annotate(
 cantidad_horas
=ExpressionWrapper(Sum((F('cantidad_minutos') / 60)),
 output_field
=DecimalField(max_digits=4)),
 costo_total
=ExpressionWrapper(
 
Sum((F('cantidad_minutos') / 60) * (F('hoja__tasa__costo') / F('hoja__tasa__nro_horas_mes'))),
 output_field
=DecimalField(max_digits=4))
).filter(
 literal__proyecto__id_proyecto
=OuterRef('id_proyecto')
)
qs
= Proyecto.objects.prefetch_related(
 
'mis_literales'
).annotate(costo_mano_obra=Subquery(mano_obra.values('costo_total')),
 cantidad_horas_mano_obra
=Subquery(mano_obra.values('cantidad_horas')))

but later, when I add in the filter (verificado=True)

mano_obra = HoraHojaTrabajo.objects.values('literal__proyecto__id_proyecto').annotate(
 cantidad_horas
=ExpressionWrapper(Sum((F('cantidad_minutos') / 60)),
 output_field
=DecimalField(max_digits=4)),
 costo_total
=ExpressionWrapper(
 
Sum((F('cantidad_minutos') / 60) * (F('hoja__tasa__costo') / F('hoja__tasa__nro_horas_mes'))),
 output_field
=DecimalField(max_digits=4))
).filter(
 literal__proyecto__id_proyecto
=OuterRef('id_proyecto'),
 verificado
=True
)
qs
= Proyecto.objects.prefetch_related(
 
'mis_literales'
).annotate(costo_mano_obra=Subquery(mano_obra.values('costo_total')),
 cantidad_horas_mano_obra
=Subquery(mano_obra.values('cantidad_horas')))

and I got the following message:


Request Method:GET
Request URL:http://127.0.0.1:8000/api/proyectos/
Django Version:2.0.1
Exception Type:FieldError
Exception Value:
Expression contains mixed types. You must set output_field.
Exception Location:/Users/fabioandresgarciasanchez/PycharmProjects/virtualenv/proyectos_intranet_env/lib/python3.6/site-packages/django/db/models/expressions.py in _resolve_output_field, line 298
Python Executable:/Users/fabioandresgarciasanchez/PycharmProjects/virtualenv/proyectos_intranet_env/bin/python
Python Version:3.6.3


How can I get this working?
Reply all
Reply to author
Forward
0 new messages