PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verwende ich eine Unterabfrage in Django?

Dies ist vielleicht nicht genau das, wonach Sie suchen, aber es könnte Sie näher bringen. Werfen Sie einen Blick auf Anmerkungen von Django .

Hier ist ein Beispiel für etwas, das hilfreich sein kann:

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

Dadurch erhalten Sie eine Liste Ihrer Kundenmodelle, von denen jedes ein neues Attribut namens "most_recent_purchase" und das Datum enthält, an dem sie ihren letzten Kauf getätigt haben. Die erzeugte SQL sieht folgendermaßen aus:

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"

Eine weitere Option wäre das Hinzufügen einer Eigenschaft zu Ihrem Kundenmodell, die in etwa so aussehen würde:

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

Sie müssten natürlich den Fall handhaben, in dem es keine Käufe in dieser Eigenschaft gibt, und dies würde möglicherweise nicht sehr gut funktionieren (da Sie für jeden Kunden eine Abfrage ausführen würden, um seinen letzten Kauf zu erhalten).

Ich habe diese beiden Techniken in der Vergangenheit verwendet und beide haben in verschiedenen Situationen gut funktioniert. Ich hoffe das hilft. Viel Glück!