Estoy tratando de encontrar una manera de tomar una anotación sobre dos campos en un modelo agregado. Algo así como:Anotación de Django en el campo agregado con extra
total_done = qs.values(
'ability__ability_name',
).extra(
select={
'total_amount': 'effective_value + overage',
}
).annotate(
total=Sum('total_amount'),
).values(
'ability__ability_name', 'total_amount'
).order_by('-total_amount')
Lo anterior no funciona y produce el error "No se puede resolver la palabra clave 'TOTAL_AMOUNT' en el campo" Ya he probado la solución indicada aquí: Using .aggregate() on a value introduced using .extra(select={...}) in a Django Query? Sin embargo no hubo suerte aún así obtener la "no puede resolver palabra clave 'total_amount' en el campo "
Cualquier cosa que no sea realizar la consulta en sql en bruto, ya que la cadena de consulta que se está transfiriendo podría tener varios filtros y excluidas ya realizadas, lo que hace que esa perspectiva sea un poco complicada. También trato de evitar agregar el campo al modelo real y calcular su valor durante el guardado a menos que sea la única forma.
' 'total_heal'' no se menciona en la consulta, espero que quiere decir' total_amount' –
tengo? estado teniendo el mismo problema recientemente. De las preguntas anteriores parece que esto solía funcionar antes - ¿es posible (por diseño o por accidente) que se eliminó en las versiones posteriores? El problema aparentemente no está en el Cláusula SQL, pero en la función aggregate(), ya que funciona bien si invoco directamente la propiedad queryset.total_amount. –