En SQL sería:

SELECT *, 0 as new_field FROM table;

Pensé que en Django sería como

Article.objects.annotate(new_field=0)

Pero no funciona Me sale el error:

TypeError: QuerySet.annotate() received non-expression(s): 0.

¿Hay alguna manera de hacerlo?

2
Alexander Khoroshavin 9 oct. 2019 a las 14:34

3 respuestas

La mejor respuesta

Otra solución que puede probar value-expressions:

from django.db.models import Value, IntegerField

Article.objects.annotate(new_field=Value(0, output_field=IntegerField()))
1
Bear Brown 9 oct. 2019 a las 11:58

Lo que puede hacer es utilizar Coalesce.

from django.db.models.functions import Coalesce

Article.objects.annotate(annotated=Coalesce(Count("field"), 0))
2
Higor Rossato 9 oct. 2019 a las 12:57

Si desea exactamente el mismo comportamiento de esta declaración SQL: SELECT 0 as new_field ...

Puede utilizar:

Article.objects.extra({'new_field': 0})
1
zeynel 9 oct. 2019 a las 11:58
58303218