Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions main/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ def test_get(self):
resp = self.client.get(resolve_url(f'{APP_NAME}:search'))
self.assertEqual(200, resp.status_code)

def test_get_with_too_long_query(self):
resp = self.client.get(resolve_url(f'{APP_NAME}:search'), {'q': 'a' * 101})
self.assertEqual(200, resp.status_code)
Comment thread
Copilot marked this conversation as resolved.
self.assertTrue(resp.context['is_blank'])
self.assertEqual('', resp.context['q'])
self.assertEqual([], resp.context['items'])


class LevelSelectTests(TestCase):
def test_get(self):
Expand Down
26 changes: 10 additions & 16 deletions main/views/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,25 @@
def search(request: HttpRequest) -> HttpResponse:
""" 検索結果 """

def search_items(q: str = None) -> list[Music]:
filter_params = {}
if q:
# 大文字小文字区別無しの部分一致
filter_params['title__icontains'] = q
return Music.objects.filter(**filter_params).order_by('level', '-sran_level', 'title')

search_form = SearchForm(request.GET)
if search_form.is_valid():
q = search_form.cleaned_data['q']
if q:
is_blank = False
items = search_items(q=q)
else:
is_blank = True
items = []
else:
is_blank = True
# 無効な入力は空検索と同じ扱いにする (入力値も再描画しない)
search_form = SearchForm()
q = ''

Comment thread
sapuri marked this conversation as resolved.
if q:
# 大文字小文字区別無しの部分一致
items = Music.objects.filter(title__icontains=q).order_by('level', '-sran_level', 'title')
else:
items = []

context = {
'title': '{q} の検索結果'.format(q=q) if not is_blank else '楽曲検索',
'title': '{q} の検索結果'.format(q=q) if q else '楽曲検索',
'search_form': search_form,
'q': q,
'items': items,
'is_blank': is_blank
'is_blank': not q
}
return render(request, 'main/search.html', context)