ユーザーへのリンクを 2 つ含むオブジェクトを作成したいと思います。例:
class GameClaim(models.Model):
target = models.ForeignKey(User)
claimer = models.ForeignKey(User)
isAccepted = models.BooleanField()
しかし、サーバーを実行すると次のエラーが発生します。
-
フィールド 'target' のアクセサーが関連フィールド 'User.gameclaim_set' と競合しています。'target' の定義に related_name 引数を追加してください。
-
フィールド 'claimer' のアクセサーが関連フィールド 'User.gameclaim_set' と競合しています。'claimer' の定義に related_name 引数を追加してください。
エラーが発生する理由と修正方法を教えていただけますか?
ベストアンサー1
User への外部キーが 2 つあります。Django は、User から GameClaim への逆リレーション (通常は ) を自動的に作成しますgameclaim_set
。ただし、FK が 2 つあるため、gameclaim_set
属性も 2 つ存在することになり、これは明らかに不可能です。そのため、逆リレーションに使用する名前を Django に伝える必要があります。
related_name
FK定義で属性を使用します。例:
class GameClaim(models.Model):
target = models.ForeignKey(User, related_name='gameclaim_targets')
claimer = models.ForeignKey(User, related_name='gameclaim_users')
isAccepted = models.BooleanField()