es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo establecer una lista vacía [] como valor predeterminado para el campo ArrayAgg en lugar de [None] en Django.

Tengo una consulta:

Teacher.objects.alias(
    raw_courses_ids=ArrayAgg('courses_can_teach', distinct=True),
).annotate(
    courses_ids=Case(
        When(raw_courses_ids__contains=[None], then=Value([])),
        default=F('raw_courses_ids'),
        output_field=ArrayField(IntegerField())
    )
).values_list(
    'courses_ids'
)

Y obtuve un error: django.core.exceptions.FieldError: No se puede resolver el tipo de expresión, output_field desconocido

¿Qué debo hacer?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que no se puede determinar el campo de salida para el caso de la anotación. Para resolver este error, puedes definir explícitamente tanto el campo de entrada como el de salida en el caso de la declaración, de la siguiente manera:

    Teacher.objects.alias(
        raw_courses_ids=ArrayAgg('courses_can_teach', distinct=True),
    ).annotate(
        courses_ids=Case(
            When(raw_courses_ids__contains=[None], then=Value([])),
            default=F('raw_courses_ids'),
            output_field=ArrayField(models.IntegerField())
        )
    ).values_list(
        'courses_ids'
    )
    

    Aquí, declaramos explícitamente el campo de entrada como models.IntegerField() y el campo de salida como ArrayField(models.IntegerField()). Con estos cambios, el tipo de expresión debería resolverse correctamente y la consulta debería ejecutarse sin errores.

Comments are closed.