2009-11-06 6 views
2

Mon DjangoApp utilise des catégories pour générer une navigation et mettre des choses dans ces catégories.django relations récursives

Il existe deux types de catégories: sont si similaires

  • ParentCategories (catégories supérieures)
  • ChildCategories (les sous-catégories qui ont un ParentCategory comme parent)

Parce que les catégories Je ne veux pas utiliser deux modèles différents. Ceci est mon modèle de catégorie:

class Category(models.Model): 
    name = models.CharField(max_length=60) 
    slug = models.SlugField(max_length=80, blank=True) 
    is_parent = models.BooleanField() 
    parent = models.ForeignKey('self', null=True, blank=True) 

Dans mon djangoadmin le parent ne sera pas représenté. Si j'utilise sql python manage.py je reçois:

CREATE TABLE "catalog_category" (
    "id" integer NOT NULL PRIMARY KEY, 
    "name" varchar(60) NOT NULL, 
    "slug" varchar(80) NOT NULL, 
    "is_parent" bool NOT NULL 
) 
; 

Ainsi, la relation parent ne sera même pas créé.

Existe-t-il un moyen pratique de résoudre ce problème?

Je sais que je pourrais simplement modifier la table, mais je suis en train de vidanger/supprimer la base de données beaucoup parce que l'application change rapidement et je ne veux pas modifier la table à chaque fois manuellement. Btw: mon dev db est bien sûr sqlite3. Sur le serveur, nous utiliserons postgresql

+0

Quelle version de Django vous utilisez? –

Répondre

3

Quelque chose d'autre se passe - cette définition de parent est très bien. Si je lance manage.py sql sur une application avec ce modèle copier-collé dans, je reçois:

BEGIN; 
CREATE TABLE "bar_category" (
    "id" integer NOT NULL PRIMARY KEY, 
    "name" varchar(60) NOT NULL, 
    "slug" varchar(80) NOT NULL, 
    "is_parent" bool NOT NULL, 
    "parent_id" integer 
) 
; 
COMMIT;