Supposons que le modèle X
comporte un champ n
(un entier). Maintenant, j'ai aussi un modèle Y
qui a des champs n
et m
(entiers). Est-il possible d'utiliser Django ORM pour sélectionner x
(modèle X
) de telle sorte qu'il existe y
(modèle Y
) tel que x.n = y.n
et y.m = m
pour une valeur donnée de m
?Jointures arbitraires dans les modèles Django
S'il vous plaît ne me conseille pas d'introduire une relation ForeignKey
entre les deux modèles ou quelque chose comme ça. J'aimerais savoir précisément s'il est possible d'y parvenir sans modifier le modèle. Dans le cas précis sur lequel je travaille, les relations données sont génériques. Et le côté opposé de la relation générique peut être n'importe quoi, donc selon les docs je ne peux pas vraiment introduire GenericRelation
plusieurs fois dans différents modèles.
Est-ce seulement moi ou est-ce une grave lacune dans la fonctionnalité? Comment est-ce possible que ce ne soit pas trivial? Je commence à penser que le fait qu'ils gardent leur code dans svn est un mauvais signe. – julkiewicz
Dans le monde Django, moins contraignant que vous ne le pensez. Si vous voulez faire des jointures arbitraires, le SQL brut (retournant les objets du modèle réel) est là pour vous. Et ... vous savez, j'aime git et Mercurial aussi, mais si la plus grande plainte à propos d'un projet open source est son goût pour les outils de contrôle de code source, on a atteint le paradis. – Christophe
@Christophe Le problème avec SQL brut est que vous avez besoin de générer des noms de table à la main, les noms de colonnes à la main. Et je pense que cela rend la transaction actuelle aussi sale. Je sais que c'est possible, mais si chaque fois que j'ai besoin de faire quelque chose d'un peu inhabituel, j'ai besoin d'écrire SQL à la main, je préfère ne pas utiliser ORM du tout. Après un bon moment passé avec Django ORM, je pense que c'est sérieusement cassé par le design. – julkiewicz