【Django】related_nameの設定でエラーが出たら

【Django】 related_nameの エラー解決方法

こんばんはエンジニアの眠れない夜です。

Djangoでrelated_nameの設定でエラーが出たときの解決方法の紹介です。

実際はこんな感じのエラーが出ます。

base.View.owner: (fields.E304) Reverse accessor for 'View.owner' clashes with reverse accessor for 'Partnership.owner'.
asp | HINT: Add or change a related_name argument to the definition for 'View.owner' or 'Partnership.owner'.
asp | base.View.owner: (fields.E305) Reverse query name for 'View.owner' clashes with reverse query name for 'Partnership.owner'.
asp | HINT: Add or change a related_name argument to the definition for 'View.owner' or 'Partnership.owner'.

細かいことは抜きにして、一言でいうと

related_nameが重複しないように設定すればOK!

例えば下記のように設定しているとitemが重複していると怒られます。


class View(models.Model): item = models.ForeignKey(Item, on_delete=models.CASCADE ,related_name='item') class Watch(models.Model): item = models.ForeignKey(Item, on_delete=models.CASCADE ,related_name='item')

なので、クラス名などを足して重複しない名前にします。


class View(models.Model): item = models.ForeignKey(Item, on_delete=models.CASCADE ,related_name='view_item') class Watch(models.Model): item = models.ForeignKey(Item, on_delete=models.CASCADE ,related_name='watch_item')

たったこれだけです。

この名前をどうつけようと実装には特に影響ありません。

(正しくは経験上、今の所問題ありません。)

related_nameが重複しないように設定するだけなので簡単ですね。

※ 間違っているところなどありましたらご指摘くださいm(_ _)m

 

この記事を読んでくださった方ならこちらの記事も参考になるかと思います。

ぜひご覧ください。

【Django】モデルのフィールド名は_アンダースコアから始めない方が良い

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください