2009-09-04 6 views
0

레거시 데이터베이스를 장고에 통합하려고합니다.장고와 이상한 레거시 데이터베이스 테이블

끔찍한 데이터베이스 설계로 인해 발생하는 이상한 테이블에 문제가 있습니다.하지만이를 자유롭게 변경할 수는 없습니다.

문제는 기본 키 ID가 없지만 제품 ID가없는 테이블이 있고 여기에 문제가 있다는 것입니다. 특정 열의 경우 여러 개가 여러 개인 경우가 많습니다 (예 :

).
ID | ... | namestring 

2 | ... | name1 
2 | ... | name2 

일반적인 주키 동작을 우회하고 여러 행이있는 이러한 ID에 대해 개체를 반환하는 함수를 작성할 수 있습니까? 열 명명 스트링이 목록이 될 수 있습니다. 이것은 다른 시스템에서 데이터를 내보낼로

은 고유 한 기본 키 열을 추가하지 않으면

답변

2

장고의 ORM이 테이블 작업 문제가됩니다 .. 난 그냥 액세스 할 수 있고, 필요없는 수동 편집이 없다.

기본 키를 추가하면 지정된 제품 ID를 쿼리하고 해당 제품 ID에 해당하는 값 목록을 반환하는 메서드를 작성하는 것이 간단합니다. 같은 뭔가 :

def names_for(product_id): 
    return [row.namestring for row in ProductName.objects.filter(product_id=product_id)] 

이 기능은 사용자 정의 관리자 방법, 또는 당신에게 가장 적합한 무엇이다 당신의 제품 모델에 대한 방법 또는 수 있습니다.

수정 :이 표의 product_id가 참조하는 제품 모델이 있고이 테이블에서 사용하는 유일한 제품은 해당 제품의 이름을 찾는 것입니다. 다른 옵션은 다음과 같습니다. 이 테이블을 ORM에서 제외하고 그냥 uses raw SQL and cursor.execute이라는 제품에 메서드를 작성하여 해당 제품의 이름을 가져옵니다. 이것은 훌륭하고 깨끗하며 테이블에 고유 한 PK를 추가 할 필요가 없습니다. 당신이 잃는 가장 중요한 것은 Django modelforms 또는 admin을 통해이 테이블을 관리 할 수있는 능력입니다.

+0

감사합니다. 합리적인 해결책 인 것 같습니다. 관리자 나 같은 것을 통해 실제 객체 접근을 우회하는 방법이 있다면 나는 행복 할 것이다. –

관련 문제