2010-06-22 3 views
6

하나의 기본 키 열없이 다 대다 관계를 저장하는 테이블이있는 레거시 데이터베이스가 있습니다. 거기에 장고가 어쨌든 그것을 사용하도록 설득 할 수있는 방법이 있습니까? 도식적으로Django : 복합 키가있는 테이블을 통한 다 대 다

:

Product 1<---->* Labeling *<---->1 Label 

Labeling 테이블 복합 기본 키로 (product_id,label_id) 사용하고, 나는 이것에 대해 장고를 통보 할 수있는 방법이 표시되지 않습니다. (그냥 through을 사용하면 Unknown column 'labeling.id' in 'field list'이됩니다.)

맞춤 SQL로 폴백해야합니까? 또는 나는 무엇인가 놓치고 있냐? 이 당신을 도와

답변

1

당신은 다 대다 테이블 모델에 unique_together를 추가하는 경우, 장고 그 열을 사용하는 대신 차를 기대합니다 키는 id입니다.

+0

실제로는 'id'필드도 생성됩니다. [해결 방법] (https://stackoverflow.com/a/28712960/52499)이 있습니다. 하지만 실제로 제 경우에는 여분의'id' 필드를 사용하기로했습니다. 기존 테이블이 없습니다. –

1
+0

나는 그것을 기대하지 않았다. 그러나 그것은했다 :'unique_together'는 장고가 기본 키 컬럼을 요구하는 것을 멈추기 위해 필요한 모든 것이다. 답변에 단어를 추가하면 동의 할 수 있습니다. (Afaik'db_index'는 무의미합니다 : 개별 필드에만 적용됩니다.) – Tikitu

+0

Django는 unique_together *를 추가해도 장고가 더 이상 불평하지 않지만 * 여전히 * 완전하지는 않습니다. 예를 들어, delete (Model.Delete())는 지정된 매개 변수에서 지정된 모델을 제외하고는됩니다. 나는 충분히 감히이 문제를 해결할 수있는 전문가이다. 장고는 모델에 기본 키가 없다는 것을 지원하지 않는다. – Boaz

+0

@Tikitu 감사합니다. 고마워요, 고마워요! Django가 여러 개의 다 대다 중간 테이블을 가진 레거시 읽기 전용 데이터베이스에'primary_key = True' 컬럼을 요구하지 않게하는 방법을 찾아 내려고 노력했습니다. 'unique_together'에 대해 알고 있었지만 장고의'primary_key = True'에 대한 장고의 주장이 사라지는 것을 깨닫지 못했습니다. 이제 Django 1.8은 ForeignKey 필드에서'primary_key = True'를 설정하는 것에 대한 경고를 실제로 내었으므로 갑자기 이것이 매우 중요하게되었습니다. – CoreDumpError

관련 문제