2009-05-14 2 views
1

우리는 기존 응용 프로그램과 함께 django를 실행하고 데이터베이스를 공유합니다. 그리고 우리는 사용자 정보를 저장하기 위해 기존의 "사용자"테이블 (Django의 테이블이 아닌)을 사용하고자합니다.Django에서 다른 db 테이블을 사용하기 위해 User 클래스를 어떻게 바꿀 수 있습니까?

사용자 정의의 메타 클래스에서 장고가 사용하는 테이블의 이름을 변경할 수있는 것처럼 보입니다.

그러나 장고 코어 자체는 변경하지 않는 것이 좋습니다. 여기

class OurUser(User) : 
    objects = UserManager() 
    class Meta: 
     db_table = u'our_user_table' 

, 목적은 사용자 정의 된 사용자 클래스에 여분의 필드를 추가되지 않습니다 :

그래서 우리는이 같은 핵심 auth.User 클래스는 우리가 하위 클래스 수 있다고 생각했다. 하지만 대체 테이블을 사용하는 것뿐입니다.

그러나 ORM은 our_user_table이 원래 User 테이블을 참조하는 외래 키를 가져야한다고 가정하기 때문에 실패합니다.

그래서 우리가하고 싶은 일을하는 것이 현명한 방법입니까? 클래스를 테이블에 매핑하는 좀 더 쉬운 방법을 놓친 적이 있습니까? 그렇지 않다면, 이것이 작동하도록 만들 수 있습니까?

업데이트 : 난 그냥 "원숭이 패치"는 local_settings.py에서 사용자의 _meta으로 내가 원하는 변화를 만들 수있을 것 같아요

User._meta.db_table = 'our_user_table' 

사람은 아무것도 생각할 수

내가 이렇게하면 나빠질 수 있니? (특히 전형적인 Django/Pinax 응용 프로그램과 관련하여)

답변

6

이전 테이블을 alternative authentication source으로 설정하고 이러한 모든 문제를 회피하는 것이 유용 할 수 있습니다.

또 다른 옵션은 subclass the user이며 하위 클래스는 사용자 모델을 가리 킵니다. 저장 기능을 재정 의하여 이전 기능을 유지하기 위해해야 ​​할 일이 모두 있는지 확인하십시오.

나는이 두 가지 중 하나를 수행하지 않았지만 유용하게 쓰일 수 있기를 바랍니다.

업데이트 내가이 경우 대체 인증을 의미하는 것은 "예,이 유효한 사용자 이름/암호가"라는 작은 파이썬 스크립트입니다 - 그런 다음 표준 장고 테이블에있는 모델의 인스턴스를 생성, 복사 레거시 테이블에서 필드를 건너 뛰고 새 사용자를 호출자에게 반환합니다.

당신이 동기화 두 테이블을 유지해야하는 경우, 당신은 대체 인증 표준 장고 사용자를 생성하지 않으며 단지

+0

한 대체 인증 "예,이 유효한 암호와 사용자 이름이다"라고 결코 가지고 결정할 수 출처. –

+0

필요한 것을 수행하는 백엔드 설정은 장고와 함께 다른 인증 소스를 사용하는 표준 및 권장 방법이므로이 사람이해야 할 일입니다. 또한 빠른 Google 검색을 사용하면 예를 들어 사용할 수있는 인증 백엔드를 꽤 많이 볼 수 있습니다. –

+0

감사합니다. 어쩌면 나는 충분히 명확하지 않았지만 이것은 정확하게 우리가하려고하는 것입니다. (즉, 대체 인증 및 사용자의 하위 클래스 사용).문제는 하위 클래스를 작성함으로써 ORM이 사용자 정의 테이블 (레거시 테이블)이 원래 django auth_user 테이블에 대한 외래 키인 필드를 가질 것으로 기대한다는 것입니다. 그리고 존재하지 않기 때문에 오류가 발생합니다. – interstar