Djangoをやってみよう。 その6-Model/DBの操作-
その5の続き。
まだ画面も何もないので、
コンソールからモデルの操作をやってみる。
実行自体は簡単でpythonの対話モードを使う。
ただし、Djangoの機能だったり、
helloサイト上のクラスを正しく使うには、
ちょっとした手順がある。
python manage.py shell
このコマンドを実行するとhelloサイトの設定が読み込まれた状態で
Pythonの対話モードが起動する。
対話モードに入ったらまず、艦種を登録してみる。
>>> from warship.models import ShipClass >>> ship_class = ShipClass() >>> ship_class.name = u'駆逐艦' >>> ship_class.save()
ShipClassをインポートしたあと、ShipClassのインスタンスを作り、
nameに「駆逐艦」を設定したあと、saveメソッドを呼ぶだけ。
これで、DBに対してInsertが走る。
登録されたかどうか、検索してみる。
とりあえず、全件検索の<モデル>.objects.all()を実行してみる。
>>> ShipClass.objects.all() <QuerySet [<ShipClass: ShipClass object>]>
なんか帰ってきたがよくわからんね。
チュートリアルでは「モデルに__str__メソッドを追加するのが重要です。」なんて、
あとに書いてある。
こっちも真似してmodels.pyのクラスを以下のように変えてみる。
from django.db import models # Create your models here. class ShipClass(models.Model): name = models.CharField(max_length=30) def __str__(self): return self.name class Warship(models.Model): ship_class = models.ForeignKey(ShipClass, on_delete=models.CASCADE) name = models.CharField(max_length=30) def __str__(self): return u"{0} - {1}".format(self.ship_class, self.name)
そしたら、一旦、対話モードを終了し、再度、対話モードで実行しなおして
検索を行ってみる。
>>> ShipClass.objects.all() <QuerySet [<ShipClass: 駆逐艦>]>
中身が見えるようになったので、登録されていたことが確認できた。
all()は全件検索なので、絞り込みをやってみよう。
>>> ship_class = ShipClass.objects.filter(name=u"駆逐艦") >>> print(ship_class) <QuerySet [<ShipClass: 駆逐艦>]>
絞り込みはfilter()。
抽出条件をキーワード引数で指定すると、絞り込みを行ってくれる。
ついでに、もう一回登録をやってみる。
今度は、艦船を登録してみる。
>>> ship_class = ShipClass.objects.filter(name=u"駆逐艦")[0] >>> from warship.models import Warship >>> warship = Warship() >>> warship.ship_class = ship_class >>> warship.name = u"暁" >>> warship.save() >>> Warship.objects.all() <QuerySet [<Warship: 駆逐艦 - 暁>]>
とまぁ、うまくできているようだ。
データベースを触らずにテーブル作って、データ登録までできるって
なんて楽なんだろう。
といったところで、次回へ続く。