【Django】models.py:別アプリのモデルをimportして使う方法
2020.08.07 /
この記事は、DjangoでWebアプリケーションを作成している方を対象としております。
models.pyでモデルを定義する際に、同じプロジェクト内の別アプリケーションのモデルを参照・使用したい場合があります。
その場合は、別アプリケーションのモデルをimportしなければ使用することができません。
本記事では、別アプリケーション内のモデルをimportして、models.pyで使用する方法を解説します。
別アプリのモデルを利用したい場合とは
どんな場合に同じプロジェクトの別アプリケーションで定義したモデルを使うのか。
例えば、DjangoでWEBアプリケーションを作成している際、多くの場合でユーザーを作成してログイン機能を持たせます。
DjangoにはデフォルトのUserモデルがあります。
このデフォルトのUserモデルをそのまま使うことは公式で推奨されていないので、カスタマイズしてカスタムユーザーモデルとして使用します。
このカスタムユーザーモデルは、他のプロジェクトでも再利用できるようにusersアプリケーションを作成して、他のアプリケーションとは独立させます。
そしてこのuserアプリケーションのUserモデルを別のアプリケーションで使用するためにimportする必要があるのです。
別アプリのモデルをimportする
それではDjangoにおける別アプリのモデルをimportする方法を解説していきます。
下記のようにpostアプリケーションのPostモデルがあるとします。
from django.db import models
from django.utils import timezone
class Post(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
このPostモデルにuserフィールドを追加して、usersアプリケーションのUserモデルを外部参照させる場合は以下のように記述します。
from django.db import models
from django.utils import timezone
from users.models import User #追加
class Post(models.Model):
user = models. ForeignKey(User, on_delete=models.CASCADE) #追加
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
別アプリのモデルをimportするには
from アプリケーション名.models import クラス名
という形式をとります。
そして参照させたいフィールドにForeignKeyでUserモデルを指定すれば完成です。
まとめ
他のアプリケーションのモデルをimportして参照・使用する方法はいかがでしたでしょうか。
WebアプリケーションをDjangoで作成する上で、必ず必要となる知識です。
ぜひみなさんのアプリケーション作成に役立ててください。