我想在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
,列a
和b
必须一起是主键。
我发现example与unique_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模型解决此问题吗?