Django|Python shellを使ってオブジェクトを追加してみる

ターミナル上でpython manage.py shellというコマンドで、Djangoのshellを呼び出すことができます。

このshell機能を使って、Djangoのデータベースを操作してみましょう。

Djangoのルートディレクトリ(manage.pyがあるディレクトリ)で以下のコマンドを実行してください。

python manage.py shell

するとインタラクティブシェルが表示されますので、まずは以下のように必要な機能をインポートします(Postは自作のモデルです)

>>> from django.contrib.auth.models import User
>>> from blog.models import Post

Djangoではインタラクティブシェルを通じて、オブジェクトを操作できるのです。

ここではQuerySetsを使ってテーブルにオブジェクトを挿入してみましょう。

以下の作業で新しいオブジェクトを追加することができます。

# ユーザーを取得します(fjユーザー)
>>> user = User.objects.get(username='fj')

# テーブルに追加するオブジェクトを作成します
>>> post = Post(title='新しい投稿',slug='new-post',body='これは新しい投稿の本文です',author=user)

# 作ったオブジェクトをテーブルに保存します
>>> post.save()

上記のコマンドはINSERT文を発行するのと同じです。

同等のコマンドを一行で実行したい場合は以下のように書きます。

>>> Post.objects.create(title='さらなる新しい投稿', slug='more-post',body='またまた新しい投稿しちゃったよ〜', author=user)

QuerySetsでオブジェクトを更新する

オブジェクトに対してsave()を実行すればUPDATEが発行されます。

>>> post.title = '更新したタイトル'
>>> post.save()

QuerySetsでオブジェクトを取得する

すべてのオブジェクトを取得するためには、モデル.objects.all()を実行します。

>>> all_posts = Post.objects.all()
>>> all_posts
<QuerySet [<Post: さらなる新しい投稿>, <Post: 更新したタイトル>, <Post: 本日は晴れです>]>

QuerySetsで取得した結果をフィルタリングする

モデル名.objetcs.filter(属性__属性の値=XXX)でフィルタをかけることができます。

>>> Post.objects.filter(title__contains='晴れ')
<QuerySet [<Post: 本日は晴れです>]>
>>> Post.objects.filter(publish__year=2020).filter(author__username='fj')
<QuerySet [<Post: さらなる新しい投稿>, <Post: 更新したタイトル>, <Post: 本日は晴れです>]>

フィルタリングにはexclude()で特定の条件を除いたり、order_by()で並べ替えたりすることもできます。

フィルタリングについては下記のサイトがよくまとまっていたので、何ができるかを知りたい方は参考にしてください。
参考記事のタイトルとURLを入力してくださいQuerySetのfilterメソッドの使い方まとめ” site=”CodeLab”]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です