web-dev-qa-db-fra.com

Clé primaire composite dans django

J'ai une table db 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 modifier la structure de la table?

P.S. J'utilise postgresql.

35
khajvah

Essayez un 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 souhaitez uniquement 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 il essaie de mettre à jour (place les champs pk juste après "SET") les champs qui sont uniques ensemble et échoue évidemment.

46
M.javid