PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como usar a subconsulta no django?


Isso pode não ser exatamente o que você está procurando, mas pode aproximá-lo. Dê uma olhada em anotação do Django .

Aqui está um exemplo de algo que pode ajudar:
  from django.db.models import Max
  Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))

Isso lhe dará uma lista de seus modelos de clientes, cada um dos quais terá um novo atributo chamado "most_recent_purchase" e conterá a data em que eles fizeram sua última compra. O sql produzido fica assim:
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"

Outra opção seria adicionar uma propriedade ao seu modelo de cliente que seria algo assim:
  @property
  def latest_purchase(self):
    return self.purchase_set.order_by('-date')[0]

Obviamente, você precisaria lidar com o caso em que não há compras nesta propriedade, e isso potencialmente não funcionaria muito bem (já que você estaria executando uma consulta para cada cliente para obter sua última compra).

Eu usei essas duas técnicas no passado e ambas funcionaram bem em diferentes situações. Eu espero que isso ajude. Boa sorte!