はじめに
DjangoでECサイトを作成する際に知らなかったメソッドを調べた。
調べたメソッド---現在作成途中---
get()
オブジェクトが一つのときに使う。
なので、主にパラメーターにはpkまたはslugが入る。
オブジェクトが無いor複数のオブジェクトが存在するときはエラー
filter()
パラメーターで指定した条件を満たすオブジェクトをリストで返す。
複数のオブジェクトを取ってくることを想定しているので、pkやslugは入らない。
get_object_or_404()
get()と似ている。
存在しない場合は django.http.Http404(例外)を返し、複数存在する場合はMultipleObjectsReturned(これまた例外)を返す。
get_list_or_404()
filter()と似ている。
リストが空の場合、django.http.Http404(例外)を返す。
try,exceptで条件分岐?
c_page = get_object_or_404(Category, slug=c_slug)
疑問
objects = ModelName.objects.filter()
objects = ModelName.objects.all().filter()
の違いは何か?
調べた結果
基本.all()はいらない。
all() が必要となるのはルートクエリセットから全てのオブジェクトを取り出 したい場合だけ。
と言われても…ん?って感じ。
参考URL
reverse()
urlを生成するメソッド
from django.urls import reverse
reverse('shop:products_by_category', args=[self.slug])
の場合はshop/products_by_category/self.slugを生成
公式ドキュメント(まだ和訳されてない)