Я хочу использовать составной первичный ключ в моем приложении 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
должны быть первичным ключом вместе.
Я нашел пример с 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?