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文は必要ないので、削除してしまう。