如何在Django中使用复合主键

时间:2019-04-17 14:36:49

标签: python django composite-primary-key

我想在django应用程序中使用复合主键。等效于以下sql模式:

create table A (
a SERIAL NOT NULL,
b INTEGER NOT NULL,
c VARCHAR(50),
PRIMARY KEY(a, b)
)

insert into A (b, c) values (1, 'auto a, set b; 1.1');
insert into A (a, b, c) values (1, 2, 'set a, set b; 1.2');
insert into A (b, c) values (2, 'auto a, set b; 2.1');
insert into A (a, b, c) values (1, 3, 'set a, set b; 1.3');
insert into A (a, b, c) values (2, 4, 'set a, set b; 2.2');

select * from A;

a | b | c
-------------------------
1 | 1 | auto a, set b; 1.1
1 | 2 | set a, set b; 1.2
2 | 2 | auto a, set b; 2.1
1 | 3 | set a, set b; 1.3
2 | 4 | set a, set b; 2.2

a必须是serial,列ab必须一起是主键。 我发现exampleunique_constraint = (('a', 'b'),)在一起,但它导致integer列的类型为a,并在数据库模式中导致以下索引:

"pkey" PRIMARY KEY, btree (a) 
"some_constraint" UNIQUE CONSTRAINT, btree (a, b)

所以该解决方案不适合我,因为b列未包含在主键索引中。

我也尝试不使用a = AutoField()的情况下使用primary_key=True,但是会引发AssertionError: Model A can't have more than one AutoField

有人知道如何通过Django模型解决此问题吗?

0 个答案:

没有答案