【Django】ForeignKeyでモデルのインポートをしない 文字列でモデルを指定する方法 NameError への対処法

think-old-man-imgDjango

Djangoのモデルフィールド「ForeignKey」を設定する際に

他ファイルからインポートをしないでモデルを指定したい

もしくは、

NameError: name 'ModelName' is not defined

が出てきてしまう

そんな時のモデルの指定方法をご説明します

ズバリ、解決策!

実例からご紹介

class Lead(models.Model):
    ....
    ....
    person = models.ForeignKey("leads.Person", on_delete=models.CASCADE, default=1, verbose_name="担当者名")
    ....

上記の「person」というフィールドではモデルを文字列で指定しています

構造の解説

上記の例をいればもう分かったという方もいらっしゃると思いますが、下記の通り記述すればstr型(文字列)で指定可能です

<フィールド名> = models.ForeignKey("<apps.py内のname>.<モデルクラス名>")

通常は、

from leads.models import Person

class Lead(models.Model):
    ....
    ....
    person = models.ForeignKey(Person, on_delete=models.CASCADE, default=1, verbose_name="担当者名")
    ....

というように、対象のモデルをインポートした上で使用する形はよく見ることと思います

ただこの場合、モデル数が増えてきたりした場合にimportの関係がとても複雑になってくるためうまく機能しない場合が多いです

そんなときにこちらの文字列型で指定する方法をうまく活用して下さい

以上、モデルのインポートなくForeignKeyにモデルを指定する方法、のご説明でした

最後までお読み頂きありがとうございました!!!

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