2009-11-06 110 views
2

我的DjangoApp使用类别来生成导航并将东西放入这些类别中。Django递归关系

有两种类型的类别:

  • ParentCategories(顶部类别)
  • ChildCategories(亚类具有一个ParentCategory作为父)

因为那些类别是如此的相似我不想使用两种不同的模型。 这是我的分类模型:

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) 

在我djangoadmin家长不会来表示。 如果我使用Python manage.py SQL我得到:

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 
) 
; 

所以父母的关系甚至不会被创建。

有没有一个方便的方法来解决这个问题?

我知道我可以改变表格,但我正在刷新/删除数据库相当多,因为应用程序变化很快,我不想每次手动更改表格。

btw:我的开发数据库当然是sqlite3。 在服务器上,我们将使用postgresql

+0

您运行的是什么版本的Django的? – 2009-11-06 11:51:03

回答

3

其他事情正在发生 - parent的定义是好的。如果我与一个应用程序运行manage.py sql这种模式复制粘贴的,我得到:

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;