Django:Modelで循環importエラーが発生した

pythonWeb開発

DjangoでWebアプリケーションを開発しているときのことなのですが、久しぶりにはまったので、それについて書きます。

なににはまったのかというと、Modelにあらたにforeignkeyを追加しようとしたら、エラーがでて。その原因がなにかわからず、解決するまでにすこし時間がかかりました。

原因は、Model同士で互いにimportしあっていたことでした。

循環import問題の内容

例えば、以下のように2つのModelが定義されており、互いに参照しているとする。
あまりこういう状況はないですが、わかりやすくするためにこうします。

persons/models.py

from families.models import Family

class Person(models.Model):
    family = models.ForeignKey(Family, on_delete=models.PROTECT)

families/models.py

from persons.models import Person

class Family(models.Model):
    person = models.ForeignKey(Person, on_delete=models.PROTECT)

この場合、互いにimportして参照することになるため、エラーとなります。
開発しているプロダクトが大きいと、先頭でimportするものも増えるため、なかなか気づきにくいですね。。。

循環import問題の解決方法

どちらか片方のModelの参照を、以下のように変更する。

例えば、persons/models.pyの方を変更する。

class Person(models.Model):
    family = models.ForeignKey('families.Family', on_delete=models.PROTECT)

※ import文は必要ないので、削除してしまう。

タイトルとURLをコピーしました