2011-02-02 24 views

答えて

12

ほとんどの場合、主に複数の列のキーをプライマリキーにする必要はありません。

Djangoはサロゲートキーに最も適しています。すなわち、idという自動インクリメントフィールドが自動的に定義され、プライマリキーに設定されます。それはほぼすべての用途に適しています。

2つ以上のフィールドにわたってモデルに固有の制約を適用する必要がある場合は、Metaクラスのunique_together設定を使用できます。

+0

サロゲートキーの動作を理解するには、この[リンク](http://stackoverflow.com/questions/16800375/how-can-set-two-field-primary-key-for-my-models-in-django)を参照してください。 .. – Jeril

+0

「ほとんどの時間」はいつですか?どうも –

6

これはDjangoに組み込まれていません(#373を参照)。説明についてはhttp://code.djangoproject.com/wiki/MultipleColumnPrimaryKeysの下部を参照してください。私は後世のためにここに "代替の方法"のセクションをコピーしました。

代替方法

notnotpeter:現在、あなたはジャンゴで プライマリにキーのいずれかを宣言し、モデルにユニーク 制約を追加することで、それは 「偽」することができます。 (もっと 情報...例を必要ですか?)

MJM:私はここで提案されているものを理解し 場合、使用する 非化合物固有のキーがある場合にのみ機能します。 このように、 は、自然に のCKをDjangoに組み込む設計を絞り込むことができますが、CKのみを持つ既存のスキーマ を使用するには、 を使用しないでください。

djansoft: を一意に使用して行うことができます。

Tobu:キーは1つしか使用できません。 A イラストレーションの使用例: 名前空間タグ?名前空間と名前の で作られたCKを持つモデル。キー のキーは、名前空間にすることはできません。 があいまいなので、 という名前をキーにすることはできません。唯一の解決策(と私は それは悪いモデリング とカウンターで シリアル化されるデータベースアクセスを強制的に)嫌いです) AutoFieldを使用するか?

toszter:ナッツの私を呼び出すが、なぜ が Djangoは次の3本のPKだけのハッシュ だ「隠された」 pk_composite列を作成するために使用する、モデル内の 主キーとして任意の数の列を宣言しません行の値は? pkのルックアップを実行すると、 の値の組み合わせが の値が主キーであるとします。何もない場合は、何も です。だから、あなたは完全なpk_compositeを作成 に必要な値に応じて を検索する場合、ハッシュ は常に計算し、ハッシュ アルゴリズムが公開されている場合は、 URLをオフに使用することができ、DBでクエリ文字列 検索し、ちょうど約どこでも。 私の心の中ではかなりシンプルに見えますが、 もう一度私は偉大にならないでしょう 詳細はこちら。

つまり、私はテーブルにIDを作成し、プライマリキーにします。次に、user_id +タイムスタンプに一意の制約を追加します。キーは、単一列でなければならない場合

2

IDが追加され、「アウトオブボックス」(variable.id)と現在の時間だけyourappに

from django.db import models 

date = models.DateTimeField(auto_now_add=True) 

を追加します/models.py

あなたは2つの値を持っていますので、魔法のうちあなたが望むどんな形ででもあなたのキーを作ることができます。

マルチカラムキーが必要な場合は、もう一方の答えをお読みください。あなたを助けることを願っています。

+0

実際にuseridフィールドは、私がこれを行う方法が混乱しているという理由で、ユーザーテーブルの主キーです。 – junto

関連する問題