Clé primaire Composite dans django

J'ai une table de base de données héritée qui a une clé primaire composite. Je ne pense pas que je serai en mesure de changer la structure pour inclure une clé de substitution, car il y a du code écrit qui utilise cette table. Et dans django, je ne peux pas utiliser cette table, car elle n'a pas de clé primaire (non composite).

Les modèles django prennent-ils en charge les clés primaires composites? Sinon, existe-t-il une solution de contournement sans changer la structure de la table?

P.S. j'utilise postgresql.

25
demandé sur khajvah 2015-02-25 09:45:38

1 réponses

Essayez le code similaire ci-dessous:

class MyTable(models.Model):
    class Meta:
        unique_together = (('key1', 'key2'),)

    key1 = models.IntegerField(primary_key=True)
    key2 = models.IntegerField()

Ou si vous ne voulez que des champs mixtes uniques:

class MyTable(models.Model):
    class Meta:
        unique_together = (('key1', 'key2'),)

    key1 = models.IntegerField()
    key2 = models.IntegerField()

EDIT: je voudrais noter qu'il y a un problème avec cette approche s'il y a 3 colonnes. Les requêtes de mise à jour ne fonctionnent pas car elles essaient de mettre à jour (met les champs pk juste après "SET") les champs qui sont uniques et échouent évidemment.

37
répondu M.J 2016-07-08 12:37:54