(編集中)【メモ、django】QuerySet APIの基本的な使い方メモ

Djangoでデータの処理に必須なQuerySetについて勉強中なので
少しでもまとめていきます。

簡単なMemoアプリを想定しています。

前提

以下のようなデータがあるとします。


In [28]: User.objects.all()
Out[28]: , ]>

In [29]: Memo.objects.all()
Out[29]: , , , , , , , ]>

In [30]: Tag.objects.all()
Out[30]: , ]>

In [28]: User.objects.all()
Out[28]: , ]>

In [29]: Memo.objects.all()
Out[29]: , , , , , , , ]>

In [30]: Tag.objects.all()
Out[30]: , ]>

各モデルの関係性は想像してもらえればと思います。

簡単な操作

In [31]: Memo.objects.filter(text="egg")
Out[31]: ]>
In [34]: Memo.objects.filter(text__in=["egg"])
Out[34]: ]>
Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello')
In [51]: Memo.objects.filter(created_at__gt=datetime.date(2005, 1, 3))
Out[51]: , , , , , , , ]>

In [52]: Memo.objects.filter(created_at__lt=datetime.date(2005, 1, 3))
Out[52]: 
[ins] In [53]: Memo.objects.all().order_by("-created_at")                                                                                            
Out[53]: , , , , , , , ]>

[ins] In [54]: memos = Memo.objects.all().order_by("-created_at")                                                                                    

[ins] In [55]: memos.values("created_at")                                                                                                            
Out[55]: )}, {'created_at': datetime.datetime(2020, 2, 15, 11, 59, 43, 797593, tzinfo=)}, {'created_at': datetime.datetime(2020, 2, 15, 11, 59, 27, 433723, tzinfo=)}, {'created_at': datetime.datetime(2020, 2, 15, 11, 58, 14, 182007, tzinfo=)}, {'created_at': datetime.datetime(2020, 2, 15, 11, 57, 53, 963877, tzinfo=)}, {'created_at': datetime.datetime(2020, 2, 15, 11, 57, 22, 450614, tzinfo=)}, {'created_at': datetime.datetime(2020, 2, 15, 11, 56, 34, 146322, tzinfo=)}, {'created_at': datetime.datetime(2020, 2, 15, 11, 54, 10, 816923, tzinfo=)}]>

先にcreted_atでソートしたあとにtextでソート

memos = Memo.objects.all().order_by("-created_at", "text") 
In [40]: Memo.objects.exclude(created_at__gt=datetime.date(2005, 1, 3))
Out[40]: 

In [41]: Memo.objects.exclude(created_at__lt=datetime.date(2005, 1, 3))
Out[41]: , , , , , , , ]>

その他

list(QuerySet.objects.all().values("id"))
list(QuerySet.objects.all().values_list("id"))

参考文献

https://djangoproject.jp/doc/ja/1.0/ref/models/querysets.html

タイトルとURLをコピーしました