Considérez ce modèle (DJANGO):
Website
Blog
News
Social Network
Q&A
Forum
Radio
Government radio
Pirate radio
Commercial radio
Internet radio
3 Réponses :
Une telle structure peut facilement être récupérée à l'aide d'une expression de table commune récursive. P>
Un exemple est E.G. Ici: http://www.postgresql.org/docs/current/statique /queries-with.html P>
L'exemple n'est pas vraiment pertinent pour Django.
@Centralniak: Pourquoi? Vous ne pouvez pas exécuter SQL requêtes avec cette chose django?
Comment puis-je interroger efficacement pour que si Je sélectionne Source par type, j'ai aussi récupérer des sources qui ont un type c'est un enfant du type donné? P>
Pour l'exemple donné, il est assez facile de configurer une requête car aucun appel récursif ne doit être effectué, et votre "hiérarchie" n'est qu'un niveau de profondeur: p>
xxx pré> Cela suppose que la source est toujours liée à un type "enfant" et non au "parent". p>
Si les sources peuvent également être liées aux types "parents", vous pouvez utiliser q pour des requêtes complexes: p>
xxx pré> si vous avez des arbres vraiment hiérarchiques Dans vos tables, cette méthode est beaucoup moins utilisable et vous devriez rechercher une autre solution. p> blockQuote>
Django-mptt ou Django-Treebeard sont d'excellents assistants pour les données hiérarchiques. Ils ajoutent tous deux des métadonnées supplémentaires à votre modèle pour permettre des requêtes efficaces.
Si vous choisissez d'utiliser Django-Treebeard, votre modèle pourrait ressembler à ceci: P>
# get all Sources of Type type and descendants of type type = Type.objects.get(name='Radio') Source.objects.filter(type__in=type.get_descendants())