web-dev-qa-db-ja.com

Djangoの同じモデルに2つの外部キーを設定するにはどうすればよいですか?

同じモデルへの2つの外部キーが必要です。

class Test(models.model):
    example1 = models.ForeignKey(Example)
    example2 = models.ForeignKey(Example)

次のようなエラーが発生します。

フィールド 'example1'のアクセサーは、関連フィールド 'Example.test_set'と競合します。 「example1」の定義にrelated_name引数を追加します。

44
MikeN

Djangoは、いくつかのpythonマジックを使用してモデル間の関係を定義します。その一部には、関係内のモデルの名前の使用が含まれます( 'test__set'の 'test'のソースです)。おそらく、定義した外部キ​​ーごとに1回ずつ、「test__set」をサンプルモデルに2回入れようとしているのではないでしょうか。

エラーメッセージは、2つの競合する名前を自動生成する代わりに使用できるrelated_name引数(それらの「test_set」の1つをオーバーライドする)を定義することを提案しています。

詳細 ここ :ページが削除されました

モデルの関係に関連する現在のページ: https://docs.djangoproject.com/en/2.0/ref/models/fields/#module-Django.db.models.fields.related

25
Matt

related_name

class Test(models.model):
    example1 = models.ForeignKey('Example', related_name='example1')
    example2 = models.ForeignKey('Example', related_name='example2')
112
strager

エラーメッセージの指示に従ってください。意味がわからない場合は、related_nameのドキュメントをご覧ください。

8
James Bennett

Django 2.0でこれを試してください:

user = models.ForeignKey(User, on_delete=models.PROTECT, null=True,  related_name='user')
paper = models.ForeignKey(paperRecord, on_delete=models.PROTECT, null=True,  related_name='paper')
3
pranjal0819