PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser la sous-requête dans Django?

Ce n'est peut-être pas exactement ce que vous recherchez, mais cela pourrait vous rapprocher. Jetez un œil à l'annotation de Django .

Voici un exemple de quelque chose qui peut aider :

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

Cela vous donnera une liste de vos modèles de clients dont chacun aura un nouvel attribut appelé « most_recent_purchase » et contiendra la date à laquelle ils ont effectué leur dernier achat. Le sql produit ressemble à ceci :

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"

Une autre option consisterait à ajouter une propriété à votre modèle client qui ressemblerait à ceci :

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

Vous auriez évidemment besoin de gérer le cas où il n'y a pas d'achats dans cette propriété, et cela ne fonctionnerait potentiellement pas très bien (puisque vous exécuteriez une requête pour chaque client pour obtenir son dernier achat).

J'ai utilisé ces deux techniques dans le passé et elles ont toutes deux bien fonctionné dans différentes situations. J'espère que ça aide. Bonne chance !