【Django】models.py:別アプリのモデルをimportして使う方法

時計 2020.08.07 / 時計

【Django】models.py:別アプリのモデルをimportして使う方法

この記事は、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で作成する上で、必ず必要となる知識です。
ぜひみなさんのアプリケーション作成に役立ててください。