2009-10-16 6 views
23

は、次のようなモデルを考えると非ユニークな、複数の列に、私は(シーケンス、株価)フィールドインデックスを作成するジャンゴ:インデックスを作成します。

class QuoteModel(models.Model): 
    quotedate = models.DateField() 
    high = models.FloatField() #(9,2) DEFAULT NULL, 
    low = models.FloatField() #(9,2) DEFAULT NULL, 
    close = models.FloatField() #(9,2) DEFAULT NULL, 
    closeadj = models.FloatField() #(9,2) DEFAULT NULL, 
    volume = models.IntegerField() #(9,2) DEFAULT NULL, 
    stock = models.IntegerField(db_index=True) #(9,2) DEFAULT NULL, 
    open = models.FloatField() #(9,2) DEFAULT NULL, 
    sequence = models.IntegerField() #(9,2) DEFAULT NULL, 

このインデックスは、非一意である必要があります - MySQLでは、それはする必要があります何かのように:

create index ndx_1 on model_quotemodel(sequence,stock); 

私の知っている唯一のDjangoの回避策は、テーブルの作成時にジャンゴによって実行される「SQL」ファイルを作成しています。だから、私は:)

create index ndx_1 on model_quotemodel(sequence,stock); 

上記と同じで、次のクエリ(それを行うのいずれかの「クリーン」方法はありますを含む「stockmodel.sql」を作成しましたか?

答えて

13

ジャンゴ1.5の時点では、使用することができますMeta.index_together option

class QuoteModel(models.Model): 
    # ... fields ... 

    class Meta: 
     index_together = [ 
      ("sequence", "stock"), 
     ] 

(注:2009年からのオリジナルの答えは、それがインデックス複数のフィールドに可能ではなかったと述べ、それは以降の置き換えられています)

+2

を参照してくださいジャンゴにindex_together 1.5

のですか?そう思わない。 –

+2

これは、質問が探しているものではありません。ユニークでない、プライマリでない複合キーが必要です。 – Fydo

+0

私は上記のコメントが現在の回答に関連しているとは思わない...それは 'index_together'_does_が一意でない非複合インデックスを提供しているような文書であると思われる – Anentropic

9

unique_togetherあなたが探しているものかもしれません。モデルのMetaクラスに入れてください。

+1

なぜ私は投票されたのですか?どうしましたか? – craesh

+5

彼はindex_togetherを求めました。あなたは彼にunique_togetherと言った。彼が尋ねたものではない。 –

+0

大丈夫、わかりました – craesh

15

あなたがSouthを使用している場合は、受け入れ答えからに従うために、あなたは簡単に複合キーを追加することができます。

の管理.py schemamigration your_app_name name_for_migration --add-index ModelName.first_field_in_index

作成した移行を編集することができますファイルを使用して、追加のフィールドを1つのインデックスに追加します(必要なフィールド名のリストだけです)。

逆方向移行と前向き移行を忘れずに更新してください。

+0

Bravo。ありがとうございました! –

関連する問題