Django 递归关系

发布于 2024-08-09 18:20:42 字数 880 浏览 2 评论 0原文

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

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

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

我知道我可以更改表,但我经常刷新/删除数据库,因为应用程序变化很快,我不想每次都手动更改表。

顺便说一句:我的开发数据库当然是 sqlite3。 在服务器上我们将使用 postgresql

My DjangoApp is using categories to generate a navigation and to put stuff in those categories.

There are two types of categories:

  • ParentCategories (top categories)
  • ChildCategories (sub categories that have a ParentCategory as a parent)

Because those to categories are so similar I don't want to use two different models.
This is my category model:

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)

In my djangoadmin the parent won't be represented.
If I use python manage.py sql I get:

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

So the parent relationship won't even be created.

Is there a handy way of fixing this?

I know I could just alter the table but I'm flushing/deleting the database quite a lot because the app changes rapidly and I don't want to alter the table everytime manually.

btw: my dev db is of course sqlite3.
On the server we'll use postgresql

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

纵山崖 2024-08-16 18:20:42

还有其他事情发生 - 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;

Something else is going on - that definition of parent is fine. If I run manage.py sql on an app with that model copy-pasted in, I get:

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文