Django Search возвращает страницу детального просмотра
в models.py
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField(blank=True, null=True)
в файле views.py
def index(request):
entry = Person.objects.all()
context = {'entry':entry}
return render(request, 'searching/index.html', context)
def detail(request, pk):
entry = Person.objects.get(id=pk)
context = {'entry':entry}
return render(request, 'searching/detail.html', context)
в urls.py
path('name/', views.index, name='index'),
path('name/<str:pk>/', views.detail, name='detail'),
Я застрял, я хочу сделать строку поиска, где если вы ищете точный id, например, моя модель имеет id 1, если я ищу 1 в поле, оно должно вернуть mysite.com/name/1 вместо того, чтобы получить страницу с результатами запросов, которые содержат 1, я хочу точный, который я искал.
Я так много искал, но не могу найти решение, это кажется простым вопросом, а я чувствую себя таким тупым. Есть ли простое решение, которое я упускаю?
Я думаю, что вы ищете способ перенаправления со страницы индекса с параметром поиска на страницу деталей. Если вы вставите в индексную страницу проверку, подобную этой, то теперь она будет принимать ID, переданный через поле поиска, и перенаправлять на эту страницу. Это оставит всю обработку ошибок, связанных с отсутствующими идентификаторами, на ваше представление detail
.
from django.shortcuts import redirect
def index(request):
pk = request.GET.get('q') # /name/?q=1
if pk:
return redirect('detail', pk=pk)
entry = Person.objects.all()
context = {'entry': entry}
return render(request, 'searching/index.html', context)
Вам нужно будет обновить 'q'
до имени вашего поля поиска. Если имена ваших url находятся в пространстве имен, вам нужно добавить это в вызов redirect
. Если ваша форма поиска отправляется с помощью <form method="POST">
, вам нужно изменить request.GET
на request.POST
.