django递归关系

时间:2009-11-06 11:39:27

标签: django recursion relationships

我的DjangoApp正在使用类别来生成导航并将内容放入这些类别中。

有两种类别:

  • 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:我的dev db当然是sqlite3。 在服务器上我们将使用postgresql

1 个答案:

答案 0 :(得分: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;