2010-03-20 12 views
5

Mi aplicación tiene dos tipos de nodos: un nodo padreque puede contener recursivas nodos hijos. Piense en ello como el sistema de post-comentario en SO, pero los comentarios pueden ser recursivas:manera correcta para modelar la relación recursiva en Django

parent_1 
    child_11 
    child_12 
    child_121 
    child_13 
parent_2 
    child_21 
    child_211 
     child_2111 

importante señalar que los nodos padres tienen diferentes atributos y comportamientos que los nodos secundarios.

recursividad Salvo que tendría los siguientes modelos:

class Parent(models.Model): 
    # fields ... 

class Child(models.Model): 
    parent = models.ForeignKey(Parent) 
    # other fields ... 

Pero la recursividad complica esto. ¿Cuál es la forma correcta (y presumiblemente más eficiente) de modelar esta relación en Django?

Respuesta

11
+0

Daniel, ¿podría explicarme por qué necesitaría un módulo externo para implementar este modelo bastante simple? –

+0

+1 por señalarme a django-treebeard. La implementación de conjuntos anidados = increíble ahorro de tiempo para mí. – cethegeek

+2

@Yuval, es una cuestión de eficiencia de almacenamiento de datos jerárquicos en una base de datos. El MPTT es uno de los enfoques más comunes actualmente en uso. Ambos proyectos que mencionó Daniel tienen más información sobre el tema, así como enlaces a aún más información. Este es uno de los artículos vinculados: http://articles.sitepoint.com/print/hierarchical-data-database – istruble

1

¿Podría usar un Generic Relation y simplemente agregar validación en el método save() (o en una señal o validación de formulario) para asegurar que el objeto es una instancia de uno u otro?

Cuestiones relacionadas