【Django】django-filterが使えない原因と解決法。
2022/7/22
2022/7/22
Django REST Frameworkのdjango-filterを使って「記事タイトルのキーワード検索するためのフィルタ機能」を作ろうとしていました。
ところが上手くdjango-filterが動かず少しハマってしまいました。
最終的に今回の場合は、一箇所の記述を変えるだけで動作したのですがその時のメモです。
django-filterが動作しない原因・解決法
views内で使用フィルタを指定するfilter_class
をfilterset_class
に変更することで動作しました。
つまり原因はこのviews内のフィルタ指定の書き方が間違っていたみたいです。
ただ、以前作成したサービスではfilter_class
でも動作しているので、もしかするとバージョンによる違いなのかもしれません。
動作しなかったコード
class Blog(models.Model):
title = models.CharField(blank=True, null=True, max_length=255, verbose_name='タイトル')
created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='作成日時')
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name='更新日時')
# 【Blog】リスト取得View
class BlogListView(generics.ListAPIView):
queryset = Blog.objects.all() # 1: クエリセット
permission_classes = (AllowAny,) # 2: アクセス許可範囲を指定
serializer_class = BlogSerializer # 3: 利用するSerializer指定
filter_class = BlogFilter # 4: 利用するFilter指定
# 【Blog】シリアライザー
class BlogSerializer(serializers.ModelSerializer):
class Meta:
model = Blog
fields = '__all__'
# 【Blog】フィルタ
class BlogFilter(serializers.ModelSerializer):
title = filters.CharFilter(name="title", lookup_expr='contains')
class Meta:
model = Blog
fields = '__all__'
修正後コード
# 【Blog】リスト取得View
class BlogListView(generics.ListAPIView):
queryset = Blog.objects.all() # 1: クエリセット
permission_classes = (AllowAny,) # 2: アクセス許可範囲を指定
serializer_class = BlogSerializer # 3: 利用するSerializer指定
filterset_class = BlogFilter # 【修正箇所】4: 利用するFilter指定
# 【Blog】シリアライザー
class BlogSerializer(serializers.ModelSerializer):
class Meta:
model = Blog
fields = '__all__'
# 【Blog】フィルタ
class BlogFilter(serializers.ModelSerializer):
title = filters.CharFilter(name="title", lookup_expr='contains')
class Meta:
model = Blog
fields = '__all__'
まとめ
やっぱり常に公式ドキュメントを見る癖をつけないといけないですね。
あと他環境でfilter_class
が動作して、今回は動作しなかった詳しい原因がわからないままですが、バージョン管理の重要さについても実感することができました。
最近の記事
音楽生成AI「Suno」の使い方まとめ!作詞作曲が簡単にできる?
簡単に曲が作れるAIということでよく聞く「Suno(Chirp)」についてまとめました。
目次「Suno」とはテキストからさまざまな音声を生成する「Bark」歌詞から曲を生成する「Chirp」...
2023/11/24
2023/11/24
【Open AI】APIの料金まとめ|GPT・DALL·E・Whisperなど
Open AIのAPI(一部)の料金をまとめました。
参考のために日本円は「1ドル150円」で換算をしています。
目次Text generation: テキスト生成Assistants ...
2023/11/22
2023/11/22
【Next.js】Assistants APIの基本的なコードまとめ。
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次Open AIのAPIセットアップ基本の使い方Threads: スレッドを作る...
2023/11/21
2023/11/21
【Next.js】Open AIのAPIでファイルをアップロードする方法。
今回は、Next.jsサイトからOpen AIのAPI(Upload file)で、ファイルをアップロードする方法を実装するのに時間がかかったのでその過程と最終コードをまとめます。(Vercelにデ...
2023/11/21
2023/11/22
「生成系AIのWEBプロダクトTOP50」をまとめてみる。
Andreessen Horowitzが出している記事で紹介されている「AIプロダクトの月間訪問者数ランキングTOP50」のサービスをまとめました。
目次ChatGPTcharacter.ai...
2023/10/3
2023/10/3
【Next.js 13】NextAuth+FireStoreにユーザー情報を保存する。
今回は、以下の3つをNext.js 13で実装するためのメモです。
Googleアカウントでログインできる
アカウント、セッション情報をFirestoreに保存する
サーバーサイ...
2023/7/12
2023/7/12