巳年じゃないけど Python やろうぜ(その 9)
Model を扱う
いよいよ今回から Model を扱います。
…の前に。
新しいアプリの作成
端末からコマンドを入力して新しいアプリを作成します。
$ ./manage.py startapp customer_search
今回はデータベース内のレコードを ID を入力して顧客を検索する customer_search アプリを作ります。なお今回から Linux 上で作業していますが、基本となる手順はほぼ同じ*1です。
settings.py
の編集を忘れずに。
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'hello', 'customer_search', # 追加 ]
Model を作成する
Model の作成は、Model に対応する class を models.py
に書くだけです。と言っても、Rails みたいにコマンド一つで自動生成、とは行かないのが難点ですが…。
from django.db import models # Create your models here. class Customer(models.Model): name = models.CharField(max_length=20) phone = models.CharField(max_length=20)
今回は Customer (顧客)という単一のモデルを扱うことにします。モデル同士の関連性についてはまた後程ということで。
CharField
は VARCHAR
型に対応するもので、max_length
にバイト数を指定できます。このコードは SQL の VARCHAR(20)
という型宣言と同等になります。なお、主キーは特に指定しなければデフォルトで id
というフィールドが勝手に作成されます。
Model を有効にする
作った Model を有効にするための作業が必要です。まずは
$ ./manage.py makemigrations customer_search Migrations for 'customer_search': search/migrations/0001_initial.py: - Create model Customer
sqlmigrate
コマンドを使うと、migrate
コマンドを実行した時に実際に発行される SQL が読めます*2。
$ ./manage.py sqlmigrate search 0001 BEGIN; -- -- Create model Customer -- CREATE TABLE "customer_search_customer" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(20) NOT NULL, "phone" varchar(20) NOT NULL ); COMMIT;
customer_search_customer
という新たなテーブルが作成されるようですね。では migrate
を実行しましょう。
$ ./manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, customer_search, sessions Running migrations: Applying customer_search.0001_initial... OK
システムに必要なテーブルは既に作成されているので、今回は新しく追加したものだけが実行されました。