sql >> Databáze >  >> RDS >> PostgreSQL

Jak používat poddotaz v django?

Možná to není přesně to, co hledáte, ale může vás to přiblížit. Podívejte se na Djangovu anotaci .

Zde je příklad něčeho, co může pomoci:

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

Získáte tak seznam modelů vašich zákazníků, z nichž každý bude mít nový atribut nazvaný „most_recent_purchase“ a bude obsahovat datum, kdy provedli svůj poslední nákup. Vytvořený sql vypadá takto:

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"

Další možností by bylo přidání vlastnosti do vašeho modelu zákazníka, která by vypadala nějak takto:

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

Zjevně byste museli řešit případ, kdy v této službě nejsou žádné nákupy, a to by potenciálně nefungovalo příliš dobře (protože byste spustili jeden dotaz pro každého zákazníka, abyste získali jeho nejnovější nákup).

V minulosti jsem používal obě tyto techniky a obě fungovaly dobře v různých situacích. Doufám, že to pomůže. Hodně štěstí!



  1. MySQL – připojení na základě data

  2. Funkce HEXTORAW() v Oracle

  3. Ekvivalent COLLATE COLLATE bez zvýraznění a velikosti písmen v Oracle

  4. Memcache vs MySQL v paměti