Django:別アプリのmodels.pyに書いたテーブルを使う時のimport方法と注意点

Django:別アプリのmodels.pyに書いたテーブルを使う時のimport方法と注意点

Django:別アプリのmodels.pyに書いたテーブルを使う時のimport方法と注意点

Djangoではアプリという纏まりがあります。
今回はこのアプリの枠を超えてテーブルを利用したい時の記載方法についてです。

呼び出し方は超簡単

まず参考サイトを記載します。参考サイトにも記載されている通り、方法は超簡単です。

views.pyはもちろん、forms.pyやurls.pyでもこの方法で別アプリに記載した情報を呼び出せます。

少し解説

他のアプリで設定した値を読み込む場合、アプリ名を指定するだけで実装できます。

1行目

同一アプリ内のmodels.pyに記載されている【class hoge(models.Model)】のimportです。
一番よく書くコードなので既に記載さ入れている事でしょう。
[ from .forms import hoge ] とすれば【class hoge(forms.ModelForm)】をimportしてくれます。

2行目

記載しているアプリとは違う【web】というアプリのmodels.pyから【class contents(models.Model)】をimportしています。「いつもの『.models』のドットの前に呼び出すアプリ名を書くだけ」という簡単な記載で実装できます。

3行目

やっていることは2行目と同じで【memo】というアプリのforms.pyから【class contents(forms.ModelForm)】をimportしています。ただし、そのままだと2行目と同じ名称になってしまうので[ as wf_content ]として呼び出し名を設定しています。

簡単だからこそ発生する問題もある

簡単ですよね。シンプルで扱いやすい!でも注意点もあります。

思い付きで書いていくとゴチャゴチャしてエラーの原因特定に時間かかります!

例えば上の例でも書いた『名前の被りもそうですし、次の例もしかりです。

例えば、ログインユーザー毎の「タスク管理」と「メモ帳アプリ」があったとします。
この場合、ログインユーザーの情報は共通ですから、2つのアプリっで共用して使うDATAです。

さぁ、ユーザー登録機能どこに作りますか?

思い付きで書いてしまえる程に他アプリのmodelやFoamを読み込むのは簡単です。
しかし、エラーの温床になりかねないので記載方法にしっかりとルールを設けましょう。

どんなルールが良いか

Modelsを中心に同じテーブルの操作は1つのアプリに書いてしまう方が良い

色々書いている中でこう感じました。

実際に私が「やらかした」例はforms.pyの記載だったのですが、呼び出すアプリで画面構成を変えようとアプリごとに書いてたんです。で、こんな感じで散らかすと「これはどこ?」という状況が発生します。

大体面倒くさがって『読み込むコードが違う事』を良いことに『同じ名前』つけがちでしょ?
なんでわけわかんなくなってくるんですよね。

1つのアプリ内で記載しておけば、class名の重複なんて絶対に発生しません。
なので、結果的に解決が早くなります。
あくまでも個人的な見解ですけど。

まとめ

「やらかしちまった」という経験ですね。
「こういうのが肥やしになる」と思って備忘録に記すことにしました。

さぁ、今日も頑張ってコード書くかな。