2012-08-07 5 views
2

장고를 사용하고있는 모델을 저장하는 가장 좋은 방법을 찾으려고합니다. 모델/테이블이 User입니다. 또한 ContactInfo이라는 모델/테이블을 가지고 있는데 여기서 User 테이블에 외래 키를 저장합니다.외래 키로 장고 모델을 저장하는 중

일반적인 django orm 연습은 ContactInfo 모델의 외래 키를 User 모델에 넣는 것이지만이 시점에서 우리는 이미 모 놀리 식 사용자 테이블에 아무 것도 추가하고 싶지 않기 때문에 외래 키를 ContactInfo 모델에 추가하십시오.

사용자 모델을 ContactInfo 모델에 저장하고 ContactInfo에서 save를 호출하면 사용자 모델을 저장해야한다는 것을 알고 있지만 사용자 및 연락처 정보와 일대 다 관계가있는 경우 어떻게해야합니까? 차라리 연락처 정보 모델/개체의 (1 - 많은) 인스턴스 내에 사용자 테이블의 인스턴스를 여러 개 보유하지 않을 것입니다.

아무 것도 정리하면 알려주세요. 현재로서는 ContactInfo 목록의 인스턴스를 user.contact_info으로 저장하고 사용자 user.save()의 저장 방법을 재정 의하여 contact_info를 확인하고, 존재하는 경우 user.id을 각 모델에 삽입하고 저장하는 것이 가장 좋습니다. 불행히도 이것은 좀 지저분한 것처럼 느껴지지만 장고와 파이썬에 대해 새로운 것이되어서 어떤 옵션이 필요한지 잘 모르겠습니다.

도움을 주시면 감사하겠습니다.

+0

장고는 다 대다 형태를 제공하지 않습니까? 그것은 당신을 위해 "중간"테이블을 만듭니다. – imm

답변

1

귀하의 질문을 올바르게 이해하고 있는지 잘 모르겠습니다. Django는 1-N 관계를 잘 지원합니다. ContactInfo의 외래 키가 User 인 경우 기본적으로 1-N 매핑입니다.

 
ContactInfo ---------> User 
      N   1 

그래서,이 데이터베이스에는 하나의 User 기록이며,이

 
Table User    Table ContactInfo 
--------------------------------------------- 
id  user_name    id  user_id 
1  someone    1   1 
           2   1 
           3   1 

처럼 보인다 그리고 당신은 save 메소드를 오버라이드 (override) 할 필요가 없습니다. 당신이 새로운 ContactInfo 레코드를 삽입하기 위해 위의 방법을 사용하는 경우,

contact = ContactInfo(user=target_user) 
# other stuff 
contact.save() 
#or 
target_user.contactinfo_set.create(...)#contactinfo_set is the related name of target_user 
#Django maintains the foreign key things. 

를 연락처를 추가해야 할 경우, 당신은 데이터베이스에 user.id 삽입하여 contact_info 목록을 반복 할 필요가 없습니다.

0

사용자 정의 User 모델 또는 Django와 함께 제공되는 표준 모델을 의미하는지 확실하지 않습니다. 후자의 경우 Django는 사용자 프로파일이라는 추가 정보를 저장하는 표준 방법을 각 사용자와 연관시킵니다. 자세한 내용은 this section in the documentation을 참조하십시오.

+0

그래, 죄송합니다. 사용자 모델이 있다는 것을 알고 있습니다. 질문의 목적에 맞게 이름을 변경했습니다. 내 실제 모델은 사용자라고하지 않습니다. 혼란에 대해 사과드립니다. – Brett

관련 문제