Open1

Djangoプロジェクトにキーワード検索機能を追加する方法

stepstep

※データベース上にキーワードを設定し画面上は表示せずに、ユーザが入力するであろう検索ワードを設定しておく方法。

Djangoプロジェクトにキーワード検索機能を追加する方法
Djangoで音楽アルバム管理サイトを構築しているとします。アルバムモデルにはさまざまなフィールドがありますが、今回はキーワードフィールドを追加して、ユーザーがより詳細な検索ができるようにします。

ステップ1: モデルの更新
まず、Album モデルに keywords フィールドを追加します。

models.py

from django.db import models

class Album(models.Model):
# 他のフィールドは省略
keywords = models.TextField(blank=True)

def __str__(self):
    return self.title

ステップ2: マイグレーションの作成と適用
新しいフィールドを追加した後、以下のコマンドを実行してマイグレーションを作成し、適用します。

python manage.py makemigrations
python manage.py migrate

ステップ3: 管理サイトの更新
今回は credits フィールドの追加は必要ありませんので、keywords フィールドのみ管理サイトに表示されるようにします。

admin.py

from django.contrib import admin
from .models import Album

@admin.register(Album)
class AlbumAdmin(admin.ModelAdmin):
list_display = ['id', 'title', 'artist', 'format', 'label', 'catalog_number', 'release_date', 'keywords']

ステップ4: 検索機能の強化
検索機能に keywords フィールドを含めるため、views.py の該当するビュー関数を更新します。

views.py

from django.db.models import Q
from .models import Album

def album_list(request):
search_term = request.GET.get('search', '')
albums = Album.objects.none()

if search_term:
    albums = Album.objects.filter(
        Q(title__icontains=search_term) |
        Q(artist__artist__icontains=search_term) |
        Q(label__label__icontains=search_term) |
        Q(format__format__icontains=search_term) |
        Q(notes__icontains=search_term) |
        Q(keywords__icontains=search_term)  # keywordsを検索に追加
    )
return render(request, 'album_list.html', {'albums': albums})

ステップ5: テンプレートの検証
album_list.html テンプレートで、ユーザーが入力した検索語がどのように表示されるかを確認します。また、検索結果が期待通りに機能するかをテストします。