この記事を三行にまとめると
AppModelを自作してみたいと思います重要なのは「abstract = True」のところ
戻って四秒で完成だ
CakePHPにはAppModelという機能がデフォルトで備わっています。モデルの処理を共通化させたりできるので、おそらくほぼ必ず使用する機能だと思うのですが、DjangoはデフォルトでAppModelに相当するようなモデルは用意されていません(たぶん)
てなことで今日はDjango用のAppModelを自作して、そのクラスを継承できるようにしてみたいと思います。
いろいろ省略していますが、ファイルの中身はこんな感じです。クラスの継承元をAppModelとしています。importしておくのも忘れずに。
クラスの継承自体は通常のpythonの書き方で問題ないのですが、重要なのは「abstract = True」のところ。
Djangoのモデルはデフォルトだとモデル名に対応したデータベースのテーブルを読み込もうとします。この場合のAppModelも、いわゆるCakePHP的なAppModelではないので、デフォルトだと他のモデルと同様に「appmodel」というテーブルを探しに行って「テレビもラジオもテーブルもねえ」というエラーを返してきます。実際にappmodelというテーブルを用意しておけばエラーは回避できますが、不要なテーブルを作るのもアレなので、ここではAppModelを抽象クラスにしています。抽象クラスのモデルはデータベースのテーブルを必要としません。
これで継承用のAppModelの使用が可能になります。
たいしたことではないのですが、CakePHPに慣れていると抽象クラスにするという発想が出てこないので(そもそも抽象クラスという単語自体知らんかったっす)、どうやればAppModelになるんだって一瞬戸惑う可能性はなきにしもあらずです。でも大丈夫。この記事を読んだ君なら戻って四秒で完成だ。
Djangoのモデルの継承についての詳細はドキュメントにも書いてあるので、もう少し詳しく知りたい場合はこちらを見てくだせえ。バージョンがちょい古いですが。
モデルの継承
てなことで今日はDjango用のAppModelを自作して、そのクラスを継承できるようにしてみたいと思います。
通常のモデルを用意
例えばユーザー管理するusersというテーブル用のモデルを作成します。ファイル名はusers.pyとしておきましょう。#users.py
from django.db import models
from app.models.app_model import AppModel
class Users(AppModel) :
id = models.IntegerField()
name = models.CharField(max_length = 100)
いろいろ省略していますが、ファイルの中身はこんな感じです。クラスの継承元をAppModelとしています。importしておくのも忘れずに。
AppModelの作成
続いてAppModelです。ファイル名はapp_model.pyにします。#app_model.py
from django.db import models
class AppModel(models.Model) :
class Meta:
abstract = True
クラスの継承自体は通常のpythonの書き方で問題ないのですが、重要なのは「abstract = True」のところ。
Djangoのモデルはデフォルトだとモデル名に対応したデータベースのテーブルを読み込もうとします。この場合のAppModelも、いわゆるCakePHP的なAppModelではないので、デフォルトだと他のモデルと同様に「appmodel」というテーブルを探しに行って「テレビもラジオもテーブルもねえ」というエラーを返してきます。実際にappmodelというテーブルを用意しておけばエラーは回避できますが、不要なテーブルを作るのもアレなので、ここではAppModelを抽象クラスにしています。抽象クラスのモデルはデータベースのテーブルを必要としません。
これで継承用のAppModelの使用が可能になります。
たいしたことではないのですが、CakePHPに慣れていると抽象クラスにするという発想が出てこないので(そもそも抽象クラスという単語自体知らんかったっす)、どうやればAppModelになるんだって一瞬戸惑う可能性はなきにしもあらずです。でも大丈夫。この記事を読んだ君なら戻って四秒で完成だ。
Djangoのモデルの継承についての詳細はドキュメントにも書いてあるので、もう少し詳しく知りたい場合はこちらを見てくだせえ。バージョンがちょい古いですが。
モデルの継承