Django Search 返回详细视图页面

Django Search returning the detailed view page

在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,它应该 return mysite。com/name/1 而不是获取包含 1 的查询结果的页面,我想要我搜索的确切结果。

我找了好久都找不到解决办法,这似乎是一个简单的问题,我觉得自己很笨。有没有我缺少的简单解决方案?

我认为您正在寻找一种从带有搜索参数的索引页面重定向到详细信息页面的方法。如果您像这样在索引页面中插入支票,它现在应该获取通过搜索字段提交的 ID 并重定向到该页面。这会将丢失 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