sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo usar la subconsulta en django?

Puede que esto no sea exactamente lo que estás buscando, pero podría acercarte más. Eche un vistazo a anotación de Django .

Aquí hay un ejemplo de algo que puede ayudar:

  from django.db.models import Max
  Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))

Esto le dará una lista de los modelos de sus clientes, cada uno de los cuales tendrá un nuevo atributo llamado "most_recent_purchase" y contendrá la fecha en la que realizó su última compra. El sql producido se ve así:

SELECT "demo_customer"."id", 
       "demo_customer"."user_id", 
       MAX("demo_purchase"."date") AS "most_recent_purchase"
FROM "demo_customer"
LEFT OUTER JOIN "demo_purchase" ON ("demo_customer"."id" = "demo_purchase"."customer_id")
GROUP BY "demo_customer"."id",
         "demo_customer"."user_id"

Otra opción sería agregar una propiedad a su modelo de cliente que se vería así:

  @property
  def latest_purchase(self):
    return self.purchase_set.order_by('-date')[0]

Obviamente, necesitaría manejar el caso en el que no hay compras en esta propiedad, y esto potencialmente no funcionaría muy bien (ya que estaría ejecutando una consulta para cada cliente para obtener su última compra).

He usado ambas técnicas en el pasado y ambas han funcionado bien en diferentes situaciones. Espero que esto ayude. ¡Mucha suerte!