2017-11-13 18 views
0

djangoで既存のモデルと多対1の関係を作成するにはどうすればよいですか? the documentationを見ると、外部キーを作成し、他のモデルへの参照を作成してオブジェクト化できることがわかります。例えばdjangoで既存のモデルと多対1の関係を作成

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() 

はその後、a.reporter.idrのIDにアクセスすることができます。

しかし、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

関連する問題