PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come usare la sottoquery in django?

Questo potrebbe non essere esattamente quello che stai cercando, ma potrebbe avvicinarti. Dai un'occhiata a annotazioni di Django .

Ecco un esempio di qualcosa che può aiutare:

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

Questo ti darà un elenco dei modelli dei tuoi clienti, ognuno dei quali avrà un nuovo attributo chiamato "most_recent_purchase" e conterrà la data in cui hanno effettuato l'ultimo acquisto. L'sql prodotto si presenta così:

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"

Un'altra opzione sarebbe l'aggiunta di una proprietà al modello del cliente che assomiglierebbe a questa:

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

Ovviamente dovresti gestire il caso in cui non ci sono acquisti in questa proprietà, e questo potenzialmente non funzionerebbe molto bene (poiché avresti eseguito una query per ogni cliente per ottenere l'ultimo acquisto).

Ho usato entrambe queste tecniche in passato ed entrambe hanno funzionato bene in diverse situazioni. Spero che questo aiuti. In bocca al lupo!