2009-10-16 2 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); 

내가의 테이블 작성에 장고에 의해 실행되는 것 "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입니까? 그렇게 보이지 않습니다. –

+2

이것은 무엇을 찾고있는 것이 아닙니다. 고유하지 않은 기본이 아닌 복합 키가 필요합니다. – Fydo

+0

위의 의견이 현재 답변과 관련이 없다고 생각합니다. 문서에서 'index_together'가 고유하지 않은 기본이 아닌 복합 색인을 제공하는 것으로 보입니다 – Anentropic

9

unique_together 당신이 찾고있는 것일 수도 있습니다. 모델의 Meta 클래스에 입력하면됩니다.

+1

왜 내가 투표를 종료 했습니까? 뭐가 문제 야? – craesh

+5

그는 index_together를 요청했습니다. 당신은 그에게 unique_together를 말했어. 그가 물었던 것이 아닙니다. –

+0

ok, 알겠습니다, 죄송합니다. – craesh

15

는 다음과 같이 쉽게 복합 키를 추가 할 수 있습니다, 허용 대답에서에 따르 .py schemamigration your_app_name name_for_migration --add-index ModelName.first_field_in_index

그런 다음 생성 된 마이그레이션을 편집 할 수 있습니다 파일을 사용하여 추가 필드를 하나의 색인에 추가하십시오 (필요한 필드 이름 목록 만 표시됨).

역방향 마이그레이션뿐만 아니라 전달 역방향 업데이트도 잊지 마십시오.

+0

Bravo. 고맙습니다! –