前提
https://docs.djangoproject.com/en/4.0/intro/tutorial02/#playing-with-the-api
Django Tutorial の Part2 シェルで遊ぼう編をやる
環境は作ってあって、Question とそれに基づく Choice モデルがある状態
Question テーブルと関連する Choice テーブルのカラムを取得する
テーブルの中身の取り方を調べる
https://docs.djangoproject.com/en/4.0/topics/db/queries/
TableName.objects.get(columnName=value)
普通にテーブルのカラムを取得するときはこれで取れて
リレーショナルになっていて、子供テーブルがある場合は
.childTableName_set.all()
これで取れる。
親が1つで子供が複数の場合は
TableName.objects.select_related('childTableName').get(id=1)
こうやって取得するらしい。
実際に子供テーブルを取得
docker-compose run web \
python manage.py shell
shell モードを起動
>>> from polls.models import Choice, Question
>>> Question.objects.get(pk=1)
<Question: What's up?>
ModelName.objects.get で参照すると、前回 str で仕込んだので中身が見える。primary key が 1 の Question モデルのレコードを確認できた。
>>>
q = Question.objects.get(pk=1)
q.choice_set.all()
<QuerySet []>
これを q という変数に入れる
q の中の子供テーブルの中身を表示する
子供テーブルのレコードを作成
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>]>
childTableName_set.create(column_name=value)
これで中身を新たに作成できる
子供テーブルの中身を数える
>>> q.choice_set.count()
1
子供テーブルは
parent.childrenTable_set.count でデータの数を数えられる
子供テーブルの中身を検索して削除する
>>> c = q.choice_set.filter(choice_text__startswith='Not')
>>> c
<QuerySet [<Choice: Not much>]>
>>> c.delete()
(1, {'polls.Choice': 1})
>>> q.choice_set.all()
<QuerySet []>
>>>
.filter() で検索して、.delete() をすることで削除ができる
これで Tutorial に従って、子供テーブルの削除までの操作ができた。
まとめ
TableName.objects.get(columnName=value)
objects.get でテーブルの中のレコードを取得することができて
.childTableName_set.all()
_set.all でそのテーブルの中の子供テーブルたちを取得できる
childTableName_set.create(column_name=value)
_set.create で子供テーブルの中身は作成できて
.filter で検索できて、.delete で削除できる。
次にやること
update を調べる
https://docs.djangoproject.com/en/4.0/intro/tutorial02/#introducing-the-django-admin
admin を作り、phpMyAdmin みたいなものを動作させる。
Top comments (0)