Você está falando de um banco de dados READONLY legado, então, talvez você possa criar um esquema externo (views) sem PKs de várias colunas. Por exemplo, você pode concatenar chaves de campo. Aqui e exemplo:
Por exemplo:
Tabelas:
create table A (
a1 int not null,
a2 int not null,
t1 varchar(100),
primary key (a1, a2)
)
create table B (
b1 int not null,
b2 int not null,
a1 int not null,
a2 int not null,
t1 varchar(100),
primary key (b1, b2),
constraint b_2_a foreign key (a1,a2)
references A (a1, a2)
)
Esquema externo para ser lido pelo django:
Create view vA as
select
a1* 1000000 + a2 as a, A.*
from A
Create view vB as
select
b1* 1000000 + b2 as b,
a1* 1000000 + a2 as a, B.*
from B
Modelos Django:
class A(models.Model):
a = models.IntegerField( primary_key=True )
a1 = ...
class Meta(CommonInfo.Meta):
db_table = 'vA'
class B(models.Model):
b = models.IntegerField( primary_key=True )
b1 = ...
a = models.ForeignKey( A )
a1 = ...
class Meta(CommonInfo.Meta):
db_table = 'vB'
Você pode refinar a técnica para fazer chaves varchar para poder trabalhar com índices . Não escrevo mais amostras porque não sei qual é a marca do seu banco de dados.
Mais Informações:
Faça Django modelos suportam chaves primárias de várias colunas?
ticket 373
Métodos alternativos