web-dev-qa-db-ja.com

djangoの複合主キー

複合主キーを持つレガシーdbテーブルがあります。そのテーブルを使用するコードが記述されているため、代理キーを含むように構造を変更できるとは思わない。また、Djangoでは、主キー(非複合)がないため、このテーブルを使用できません。

Djangoモデルは複合主キーをサポートしていますか?サポートしていない場合、テーブルの構造を変更せずに回避策はありますか?

追伸私はpostgresqlを使用しています。

35
khajvah

以下のコードを試してください:

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

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

または、一意の混合フィールドのみが必要な場合:

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

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

編集:3つの列がある場合、このアプローチには問題があることに注意したいと思います。更新クエリは、一緒に一意であり、明らかに失敗するフィールドを更新しようとするため(「SET」の直後にpkフィールドを置く)、機能しません。

46
M.javid