J'essaie d'utiliser l'ORM de Django pour générer une requête en utilisant des méthodes extra et filter. Quelque chose comme ceci:Django OU requête utilisant Extra et Filtre
Model.objects.filter(clauseA).extra(clauseB).all()
Cela génère une requête, mais la question est que tout dans la clause de filtre est tout AND avec la clause supplémentaire, de sorte que le sql ressemble:
SELECT * FROM model WHERE clauseA AND clauseB.
ma question est, est-il possible de changer l'opérateur de combinaison par défaut pour une requête dans Django telle que la requête générée sera:
SELECT * FROM model WHERE clauseA OR clauseB.
Êtes-vous simplement à la recherche de la [ou de la requête?] (Http://stackoverflow.com/questions/739776/django-filters-ou) (duplication possible) – Sayse
Non, cela ne fonctionne que pour les arguments de la méthode de filtrage. J'ai besoin de changer le combinateur par défaut de telle sorte que ce qui est retourné par la méthode 'extra()' soit OR'd à ce qui est retourné par la méthode 'filter()' (au lieu de AND'd comme c'est actuellement). Ce que j'ai dans la méthode supplémentaire est SQL natif qui ne peut pas être représenté dans l'ORM de Django et ne peut pas être enveloppé avec 'Q' – jcern
Est' Model.objects.filter (Q (clauseA) | Q (clauseB)).() 'n'est pas une solution valide? Je ne vois pas pourquoi vous avez besoin de l'appel séparé (à partir de mes propres tests, ce filtre montré ici produira votre sortie sql souhaitée). Je suis sûr qu'il pourrait être possible de changer le combinateur par défaut mais je ne le conseillerais pas – Sayse