8
votes

Django: extraire un «objet Q` à partir d'un` QuerySet »

J'ai un django QuerySet , et je veux obtenir un objet q en dehors de celui-ci. (C'est-à-dire qui contient exactement la même requête que ce queryset.)

est-ce possible? Et si oui, comment?


0 commentaires

3 Réponses :


5
votes

non, mais vous pouvez créer d'abord l'objet Q et utiliser cela; Alternativement, créez votre requête en tant que dict et transmettez-la à votre méthode de filtrage et à l'objet Q.


0 commentaires

4
votes

Ce n'est pas exactement ce que vous demandiez, mais vous pouvez extraire le SQL d'une requête définie en accédant au membre de la requête. Par exemple: xxx

puis vous pouvez l'utiliser sur un nouvel objet QuerySet pour reconstruire le requérant d'origine. Cela peut mieux fonctionner dans la sauvegarde de choses comme des "valeurs" définies pour un ensemble de requêtes. Le X défini est facile à stocker. J'ai utilisé cela dans le passé pour enregistrer des requêtes / recherches construites par l'utilisateur qui sont ensuite exécutées quotidiennement avec les résultats envoyés par courrier électronique à l'utilisateur.


1 commentaires

Informations utiles, merci. Toujours pas aussi bon que q , car vous ne pouvez pas utiliser & , | et ~ sur elle, mais toujours bon à savoir.



1
votes

pertinent En outre, si vous souhaitiez que l'objet Q vous permet de reconstruire une requête complexe en fonctionne un autre objet Q, est-ce que, à condition que deux QuerySets soient sur le même modèle, vous pouvez ou le requérant directement pour ce même effet. Ça vaut la peine d'essayer et examiner le SQL avant et après.

Par exemple: p>

qs1 = model.objects.filter(...)
print("qs1: {}".format(qs1.query)
qs2 = model.objects.filter(...)
print("qs2: {}".format(qs1.query)
qs = q1 | q2
print("qs: {}".format(qs.query)


0 commentaires