gpt4 book ai didi

Django多表继承与Postgres表继承不同

转载 作者:行者123 更新时间:2023-12-05 04:51:18 27 4
gpt4 key购买 nike

所以我正在研究 Django 的多表继承,以及它与 Postgres 的表继承有何不同。

假设我有以下模型:

模型.py

class Mayor(models.Model):
name = models.CharField(max_length=255)


class City(models.Model)
name = models.CharField(max_length=255)
mayor = models.ForeignKey(Mayor, on_delete=models.CASCADE)


class Capital(City):
embassy = models.BooleanField(default=False)

现在,如果我以此为基础构建数据库,我会得到一个类似于以下内容的表:

cities:
+----------+------------------------+---------------------------------------------------------+
| Column | Type | Modifiers |
|----------+------------------------+---------------------------------------------------------|
| id | integer | not null default nextval('main_city_id_seq'::regclass) |
| name | character varying(255) | not null |
| mayor_id | integer | not null |
+----------+------------------------+---------------------------------------------------------+

capitals
+-------------+---------+-------------+
| Column | Type | Modifiers |
|-------------+---------+-------------|
| city_ptr_id | integer | not null |
| has_embassy | boolean | not null |
+-------------+---------+-------------+

这不是主意,因为这意味着要获得首府城市的市长,我必须进行 2 次连接,一次从 capitalscities,然后从城市市长

在 Postgres 中,我们可以:

cities:
+------------+-------------+------------------------------------------------------+
| Column | Type | Modifiers |
|------------+-------------+------------------------------------------------------|
| id | integer | not null default nextval('cities_id_seq'::regclass) |
| name | text | |
| mayor_id | realinteger | |
+------------+-------------+------------------------------------------------------+

where the below table is listed as a 'child'

capitals:
+------------+--------------+------------------------------------------------------+
| Column | Type | Modifiers |
|------------+--------------+------------------------------------------------------|
| id | integer | not null default nextval('cities_id_seq'::regclass) |
| name | text | |
| mayor_id | realinteger | |
| embassy | bool | |
+------------+--------------+------------------------------------------------------+

有没有办法使用Postgres' table inheritance在 Django 里面?

提前致谢

最佳答案

不幸的是,这在 Django 本身和任何第 3 方包中都没有实现。如果不对 Django 的核心进行一些重大更改,甚至可能无法创建第 3 方包。

如果您对此功能感兴趣,有一个 ticket在 Django 的错误跟踪器中关于这个确切的功能。

请记住,这种类型的继承确实有一些主要的限制,比如指向父表的外键不能处理子实例,父子之间不共享索引(没有开箱即用的解决方案跨父表和所有子表之间的唯一性)等。

关于Django多表继承与Postgres表继承不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66984433/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com