2010-11-05 6 views
2

Comment créer un type de données PostgreSQL pour Django? et comment l'utiliser avec QuerySets? (Créer wrapper comment?)comment créer un type de données ltree pour Django?

A propos LREE ici: http://www.postgresql.org/docs/current/static/ltree.html

A propos des champs personnalisés dans Django ici: docs.djangoproject.com/en/1.2/howto/custom-model-fields/

PS Il ya aussi "Django Tree Libraries" mais ltree semble mieux ..

+1

Quel est le problème avec django-MPTT? Je l'utilise depuis un moment (comme d'autres ici) avec de bons résultats. –

+1

django-mptt utilise un modèle de jeu imbriqué (http://en.wikipedia.org/wiki/Nested_set_model). Oui, c'est un bon modèle mais il est optimisé pour une lecture rapide (c'est le meilleur solutuon si seulement vous générez du contenu sur votre site, les utilisateurs lisent plutôt que créent). Ce n'est pas très bien si vous permettez aux utilisateurs de générer du contenu et que vos arbres sont gros (chaque système d'insertion mettra à jour beaucoup d'éléments). Il y a aussi l'article intéressant http://www.davidcramer.net/code/django/6939/scaling-threaded-comments-on-django-at-disqus.html et les benchmarks https://tabo.pe/projects/django- treebeard/docs/1.61/benchmarks.html –

+1

Comment stocker des arbres dans une base de données? 1. ensembles imbriqués (django-mptt, django-treebeard, django-facile-arbre) - bon pour les opérations de lecture (il y a aussi des intervalles imbriqués, désolé, trop compliqué à expliquer pour moi et pas d'applications pour django); 2. Liste d'adjacence (django-treebeard) - moyen facile si l'arbre avec pas très grande profondeur. 3. Chemin matérialisé (django-treebeard ou ltree (si utilisation postgres)) - meilleur moyen pour moi, car beaucoup d'opérations d'écriture. Donc, si ce n'est pas une chance avec cette question, le meilleur moyen pour moi - utiliser Materialized Path (django-treebeard). –

Répondre

2

Vous avez énuméré deux des pièces correctes. La méthode générale pour adapter un type de données PostgreSQL à Django est la suivante:

  1. Créez une nouvelle classe Python qui représente le type de données.
  2. Enregistrez ce type de données avec psycopg2 afin que psycopg2 comprenne comment l'adapter à la base de données.

Documentation à l'étape 2 est disponible à http://initd.org/psycopg/docs/advanced.html#adapting-new-types ...

Questions connexes