Django: 一部のモデルフィールドが互いに衝突するのはなぜですか? 質問する

Django: 一部のモデルフィールドが互いに衝突するのはなぜですか? 質問する

ユーザーへのリンクを 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_nameFK定義で属性を使用します。例:

class GameClaim(models.Model):
    target = models.ForeignKey(User, related_name='gameclaim_targets')
    claimer = models.ForeignKey(User, related_name='gameclaim_users')
    isAccepted = models.BooleanField()

おすすめ記事