2009-04-13 7 views
1

Quelle est la meilleure façon d'avoir plusieurs enregistrements enfants pointant vers un enregistrement parent dans le même modèle/table dans Django?Modélisation Python/Django Question

Est-ce la bonne application ?:

class TABLE(models.Model): 
    id = models.AutoField(primary_key=True) 
    parent = models.ForeignKey("TABLE", unique=False) 
+3

À moins de manquer quelque chose, vous n'avez pas besoin du champ id, qui sera généré automatiquement pour vous en tant que champ de clé primaire auto-incrémenté. –

+2

En outre, la valeur par défaut de unique est False, vous n'avez donc pas besoin de –

Répondre

10

Django a une syntaxe spéciale pour ForeignKey pour l'auto-joint:

class TABLE(models.Model): 
    id = models.AutoField(primary_key=True) 
    parent = models.ForeignKey('self') 

Source (deuxième alinéa)

2

Deux choses:

D'abord, vous devez autoriser la possibilité d'une valeur nulle pour r parent, sinon votre arborescence TABLE ne peut pas avoir de racine. Deuxièmement, vous devez vous inquiéter de la possibilité de "Je suis mon propre grand-père". Pour une discussion animée, voir here.

Questions connexes