우리는 기존 응용 프로그램과 함께 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 응용 프로그램과 관련하여)
한 대체 인증 "예,이 유효한 암호와 사용자 이름이다"라고 결코 가지고 결정할 수 출처. –
필요한 것을 수행하는 백엔드 설정은 장고와 함께 다른 인증 소스를 사용하는 표준 및 권장 방법이므로이 사람이해야 할 일입니다. 또한 빠른 Google 검색을 사용하면 예를 들어 사용할 수있는 인증 백엔드를 꽤 많이 볼 수 있습니다. –
감사합니다. 어쩌면 나는 충분히 명확하지 않았지만 이것은 정확하게 우리가하려고하는 것입니다. (즉, 대체 인증 및 사용자의 하위 클래스 사용).문제는 하위 클래스를 작성함으로써 ORM이 사용자 정의 테이블 (레거시 테이블)이 원래 django auth_user 테이블에 대한 외래 키인 필드를 가질 것으로 기대한다는 것입니다. 그리고 존재하지 않기 때문에 오류가 발생합니다. – interstar