2010-12-15 22 views
5

Quiero crear una categoría de Categoría que puede o no tener una subcategoría o puede o no ser una subclase de otro objeto Categoría¿Cómo crearía un modelo de Django llamado Categoría que se puede relacionar a sí mismo (para crear subcategorías)

Esto no funciona, pero da una idea de lo que estoy tratando de hacer:

class Category(models.Model): 
    about = models.TextField(blank=True) 
    parent_cat = models.ForeignKey(Category, blank=False, null=True) 
    slug = models.SlugField(unique=True, help_text = SLUG_HELP)  
    title = models.CharField(max_length = 26, unique=True) 

...

Lo que funciona en este momento es que tengo una clase que puede SubCategoría relacionarse con una Categoría. Sin embargo, me gustaría hacer que el código sea más flexible al permitir que las categorías sean subcategorías de ellos mismos. Entonces puedo tener un número ilimitado de padres/hijos. ¿Puede alguien sugerirme cómo podría hacer esto?

+0

En lo personal, yo no usaría ForeignKey. Probablemente vaya con un PositiveInteger laxado, pero estoy interesado en ver lo que dicen otros usuarios. –

Respuesta

8

Su referencia a subclases y herencia es confusa. Tienes una relación recursiva estándar, que funciona bien a través de una ForeignKey. Lo único que tenía que hacer sería definir el FK as described in the documentation:

parent_cat = models.ForeignKey('self', blank=False, null=True) 

¿Qué otra cosa "no funciona" sobre el código que has publicado?

+0

¡Qué bueno! Muy buena información. –

+0

¡Gracias por la respuesta! Intentando "self" como argumento con apóstrofes funcionó. – user509721

2

Puede usar mi modelo como ejemplo. Yo uso django-mptt para hacer una vista de listado de árbol en el front-end.

Including foreign key count in django mptt full tree listing?

class Category (models.Model): 
    name = models.CharField(max_length=100) 
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children') 
    slug = models.SlugField(unique=True) 

mptt.register(Category) 
Cuestiones relacionadas