Excluir el campo 'extra' del conjunto de consultas

Tengo un QuerySet con un campo 'extra':

query_set = data_model.extra(select={'status': '''CASE  <sql-query here>''')

Pero cuando trato de excluir o filtrar este campo:

query_set = query_set.exclude(status=1)
query_set = query_set.filter(status=2)

Me da un error:

Cannot resolve keyword 'status' into field. Choices are: <list of field from my models 
here>

Entiendo que 'extra' significa usar SQL puro (sin ORM), pero el método 'excluir' o 'filtrar' son métodos 'ORM'. Pero en este caso, ¿por qué otros métodos, por ejemplo, 'values_list', funcionan bien?

values = query_set.values_list('status')

El código anterior no genera ninguna excepción. Entonces, ¿cómo puedo filtrar o excluir campos que se obtuvieron con el método 'extra'?

Este es un modelo bastante simple (pero con muchos campos), pero este es el método 'extra' que uso:

qs = qs.extra(select={
    'void_status': '''CASE
        WHEN "orderitem".voided_date IS NULL
            THEN {normal}
        WHEN "orderitem".voided_date >= %s AND
             "orderitem".voided_date < %s AND
             "orderitem".created_date >= %s AND
             "orderitem".created_date < %s
            THEN {fully_voided}
        WHEN "orderitem".voided_date >= %s AND
             "orderitem".voided_date < %s
            THEN {voided}
        ELSE {normal}
    END'''.format(normal=1,
                  voided=2,
                  fully_voided=3)
}, select_params=[start, end] * 3)

preguntado el 02 de diciembre de 13 a las 08:12

¿Puedes publicar tus modelos y el sql adicional, por favor? -

¿Quiso decir que necesito usar algo como qs.extra(where=[...], params=[...])? Intenté esto y obtuve errores de base de datos (el campo no existe, pero parece que este es otro problema). ¡Gracias! -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.