【发布时间】:2012-01-18 23:47:27
【问题描述】:
我正在阅读别人的 Django 代码,使用 PostgreSQL,这是我不明白的。
似乎,当这段代码从另一个类定义一个类时,该类的外键会在这个类中创建。我真的不明白为什么两者之间会有联系,似乎继承和外键是完全不同的概念。
这里有一些代码,类是 Contractor,它继承自 auth.User - 这是在项目其他地方创建的自定义类。
class Contractor(lancer.auth.User):
a = models.xxxx
b = models.xxxx
....
在我同步数据库之后,数据库显示类似这样的内容,
CREATE TABLE lancer_contractor
(
user_ptr_id integer NOT NULL,
a integer,
b text NOT NULL,
....
CONSTRAINT lancer_contractor_pkey PRIMARY KEY (user_ptr_id ),
CONSTRAINT lancer_contractor_user_ptr_id_fkey FOREIGN KEY (user_ptr_id)
REFERENCES lancer_user (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
)
从这段 SQL 代码中我明白了两件事,
- 不知何故,在 Contractor 表中创建了一个指向 User 表的外键
- 该外键也是 Contractor 的主键
在使用其他一些随机类进行一些测试后,我可以确认这种情况总是会发生。这里发生了什么?为什么外键与继承混淆?
谢谢!
【问题讨论】:
标签: django inheritance foreign-keys