Comment rejoindre des modèles non relationnels dans Django 1.3 sur 2 champs
-
09-12-2019 - |
Question
J'ai 2 modèles existants que j'ai besoin de rejoindre ceux qui sont non relationnels (pas de clés étrangères).Celles-ci ont été écrites par d'autres développeurs ne peuvent être modifiées par moi.
Voici une description rapide d'eux:
processus de modèle
- Nom de champ de champ
- Chemin de champ
- Field Yepelse
- Barre de terrain
Service de modèle
- Nom de champ de champ
- Chemin de champ
- ServiceName de terrain
- champ FOO
Je dois rejoindre toutes les instances de ces deux modèles sur les colonnes de noms de fichiers et de chemins.J'ai des filtres existants que je dois appliquer à chacun d'eux avant que cette jointure ne se produise.
Exemple:
a= processus.Object.filter (quelque chose= 231)
B= Service.ObjectS.Filter (FOO= 'ABC')
résultat= a.filter (nom de fichier= b.filename, chemin= b.path)
La solution
Ceci est ceci, mais votre meilleur pari est d'itérer tous les modèles d'un type et de délivrer des requêtes pour obtenir vos modèles joints pour l'autre type.
L'autre alternative consiste à exécuter une requête SQL brute pour effectuer ces joints et récupérer les ID pour chaque objet de modèle, puis récupérer chaque paire jointe en fonction de celle-ci.Plus efficace au moment de l'exécution, mais il devra être maintenu manuellement si votre schéma évolue.