Django shell とは?
django shellはモデルを経由してデータベースを操作するためのツールです。
テストデータを入れたり、ちょっとしたデータの修正などとても重宝します。
CUIに不慣れな場合は難しく感じるかもしれませんが、習熟と共にdjangoのORM(オブジェクト関係マッピング)の理解が進むので、ぜひマスターしておきたい項目です。
*コンテンツをアップデート中です。(2020年4月13日現在)
前提条件
アプリケーションのmodels.pyは下記の様に設定されていたとします。
[編集中]
shellを起動する
$ python3 manage.py shell Python 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>
>>>の部分にコードを入力します。
新規データを投入
appアプリケーションにPhoneモデルがある前提です。
>>> from app.models import Phone >>> p1 = Phone(model_name="iphone",version="10") >>> p1.save()
phoneアプリケーションディレクトリ内のmodels.pyで定義したPhoneクラスを呼び出しています。
Phoneクラスのmodel_nameとversionに値を設定し、save()メソッドで保存しています。(INSERTコマンドが実行されます。)
models.pyで”null=True”とされているカラムは入力必須ではありません。
デフォルトが入力必須ですので、空欄でもいいカラムは”null=True”を設定しましょう。
model_name = models.CharField(verbose_name='機種名', max_length=255, null=True, blank=True)
“blank=True”はフォームからの入力値が空欄でも可か不可かの設定です。
こちらもデフォルトは必須項目ですので注意が必要です。
データを更新
>>> from app.models import Phone >>> a1 = Phone.objects.get(pk=1) >>> a1.screen_size=5.5 >>> a1.save()
登録済データのインスタンスを呼び出すにはクラス名.objects.get()メソッドを使用します。(UPDATEコマンドが実行されます。)
リレーションデータの取扱
ForeignKeyが指定しているフィールドには関連クラスのインスタンスしか代入出来ません。
PhoneクラスからForeignKey指定しているMakerクラスがある前提です。
>>> from app.models import Phone, Maker >>> m1 = Maker.objects.get(pk=2) >>> p1 = Applicant(model_name="Pixel", maker=m1) >>> p1.maker <Maker: Google> >>> p1.save()
ModelFormの使い方
ModelFormと汎用View(generic)を使う基本的な例を示します。
[編集中]