4 votes

Comment référencer l'objet actuel (objet F) dans RawSQL

Mon modèle Order ressemble à ceci:

class Order(models.Model):
    ...
    billing_email = models.EmailField()
    ...

La sortie désirée que je recherche est un ValuesQuerySet qui contiendrait certaines valeurs de champs et une valeur calculée du nombre de commandes avec le même billing_email.

J'essayais de faire référence au champ billing_email avec l'objet F mais en faisant ce qui suit, j'obtiens une erreur:

In [68]: orders = Order.objects.annotate(
    total_orders=RawSQL(
        "SELECT COUNT(*) FROM appname_order WHERE billing_email = %s",
        (F('billing_email'),)  # courriel de facturation de l'instance actuelle
    ),
)

In [69]: orders
Out [70]: ProgrammingError: can't adapt type 'F'

Essentiellement, la valeur que je dois évaluer et afficher en tant que champ supplémentaire pour chaque instance est la suivante:

Order.objects.filter(billing_email__iexact=).count()

pour chaque instance et je préférerais vraiment éviter de boucler à travers les instances actuelles et reconstruire. Je dois manquer d'une solution simple ici.

Merci d'avance pour votre aide.

1voto

Kduck Points 11

Vous pouvez faire référence à la ligne "actuelle" en utilisant le nom de la table de votre modèle :

RawSQL( "SELECT COUNT(*) FROM appname_order order WHERE order.billing_email =appname_order.billing_email",[])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X