Как использовать составной первичный ключ с Django - PullRequest
0 голосов
/ 17 апреля 2019

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

...