2017-11-13 6 views
0

django에서 기존 모델과 다 대일 관계를 만들려면 어떻게해야합니까? the documentation을 보면 외래 키를 만들고 다른 모델에 대한 참조로 개체를 만들고 개체를 만들 수 있음을 알 수 있습니다. 그런 다음 a.reporter.idr의 ID에 액세스 할 수 있습니다django에서 기존 모델과 다 대일 관계 생성

r = Reporter(first_name='John', last_name='Smith', email='[email protected]') 
r.save() 
a = Article(id=None, headline="This is a test", pub_date=date(2005, 7, 27), reporter=r) 
a.save() 

예를 들어

.

그러나 하나의 문제는 r에서 a까지의 ID를 확인하려는 경우 수행하려면 a을 만들어야합니다.

이미 기존 모델로 어떻게 할 수 있습니까?

예를 들어 사용자가있어 게임에 여러 개의 문자를 만들 수있게하려면 사용자가 이미있는 경우 문자를 외래 키로 할당 할 수 있습니까?

this answer에서 보면 외래 키를 참조 할 모델을 제공해야하지만 실제로 어떻게 수행하는지는 설명하지 않습니다.

답변

1

기존 모델을 어떻게 사용합니까?

당신이 말하는 모델이 명확하지 않습니다. 기존 기자를 의미하는 경우에, 당신은 그것을 얻을하고 그것을 정확히 같은 방식으로 할 것 : 기존 기사를 의미하는 경우

r = Reporter.objects.get(email='[email protected]') 
a = Article(headline="This is a test", pub_date=date(2005, 7, 27), reporter=r) 
a.save() 

, 당신은 단지 어떤 모델 인스턴스 필드와 같은 외래 키를 변경할 수 있습니다

a = Article.objects.get(headline="This is a test") 
a.r = Reporter.objects.create(...) # or .get() depending on what you want. 
a.save() 

사용자가 이미 존재하는 경우 어떻게 문자를 외래 키로 지정할 수 있습니까?

같은 논리를 사용하면 사용자가 얻을이 기존의 사용자 개체와 새로운 캐릭터 만들 것입니다 : 내가 AbstractUser이있는 경우

# Get user, or if this was the logged in user maybe just request.user 
user = User.objects.get(username='wanderer') 

# Create the character, using the existing user as a foreign key 
# (the .create is just shorthand for creating the object then saving it) 
Character.objects.create(character_name='Trogdor', user=user) 

# Or alternatively, you can simply use the implicit reverse relationship 
user.character_set.create(character_name='Homestar Runner') 
+0

가 어떻게 이런 짓을 했을까을? 'Field는 스왑 아웃 된 모델 'auth.User'와의 관계를 정의합니다. ' – wanderer0810

+0

예외를 읽고 해당 조언을 ​​따르십시오. 이 경우 auth.User와의 관계를 정의하지 마십시오! – SmileyChris