Closed nishishimakenya closed 1 year ago
pdb(デバッガ)を使ってget_queryset
メソッドのtitle = self.request.query_params.get('title', None)
がNoneになっていないかを確認してください。
def get_queryset(self): queryset = Task.objects.all() import pdb; pdb.set_trace() title = self.request.query_params.get('title', None) if title is not None: queryset = queryset.filter(titleicontains=title) return queryset で操作したところ /Users/nishishimakenya/chapter4/todolist/todoapp/views.py(31)get_queryset() -> title = self.request.query_params.get('title', None) となり、Noneにはなりませんでした ですが他のコードの記述部分にミスがあり、それを修正すると正しく表示されました( set = queryset.filter(booktitleicontains=title) を set = queryset.filter(titleicontains=title) に修正)
views.py を直接編集する方法ではうまくいきましたがfilters.py を用いる方法では上手くいきません
よかったです。
title = self.request.query_params.get('title', None)
これはpdbの次の行を示しているだけだから、その後にtitleって打ち込んでenter押したら、中身見れるよ。 ここは伝わりにくいかもだから、FB面談のときに一緒にやろう。
俺も基本viewsを直接編集してるから、filter使ったことないんよねぇ
(Pdb) title *** NameError: name 'title' is not defined と表示されました 了解です、filters.py は使わずにviews.py の直接編集で行きます あとテストコードのエラーがなくなればchapter4完成ですので明日には終わると思います
金曜日じゃあ、FB面談やろうか。
:bug: バグの概要
todoapp/filters.py
import django_filters from .models import Task
class TaskFilter(django_filters.FilterSet): class Meta: model = Task fields = { "title": ["exact", "icontains"], "deadline": ["exact", "lte", "gte"], }
これで検索機能を実装しようとしているのですが上手くいきません エンドポイントを http://127.0.0.1:8000/api/tasks/?title=あいうえお として、「あいうえお」というタスクのみを表示したいのですが全てのタスクが表示されてしまいます
:cyclone: バグの再現手順と発生環境
Django-restframework を用いています
GET /api/tasks/?=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A
HTTP 200 OK Allow: GET, POST, HEAD, OPTIONS Content-Type: application/json Vary: Accept
[ { "id": 10, "title": "あいうえお", "deadline": "2023-08-03T15:50:00Z", "memo": "これを検索", "sub_tasks": [] }, { "id": 11, "title": "かきくけこ", "deadline": "2023-08-18T16:01:00Z", "memo": "これは表示しない", "sub_tasks": [] } ]
「かきくけこ」を表示しないようにしたいのですが表示されます
:memo: 調べたこと
views.py を直接編集する方法もあるらしく、その手順でしてみましたが同様の結果でした
class TaskListCreateView(generics.ListCreateAPIView): queryset = Task.objects.all().order_by("deadline") # 締切順に整列 serializer_class = TaskSerializer filterset_class = TaskFilter # 検索機能追加