【问题标题】:How to refine an initial query in Django?如何在 Django 中优化初始查询?
【发布时间】:2010-01-13 16:56:13
【问题描述】:

在回复this question(再次感谢 Ellie P!)后,我创建了一个搜索页面和一个结果页面。

例如,如果您search 代表律师“delelle”,结果页面会显示她的事务所、学校和毕业年份。但我不想显示她的信息,而是想显示同年从同一所学校毕业的其他律师。

这是视图:

def search(request):
    if 'q' in request.GET and request.GET['q']:
        q = request.GET['q']
        lawyers = Lawyer.objects.filter(last__icontains=q)
        return render_to_response('search_results.html', {'lawyers': lawyers, 'query': q})
    else:
        return HttpResponse('Please submit a search term.')

谁能帮助我了解如何从初始查询中保存 schoolyear_graduated 并执行 schoolyear_graduated 搜索并显示该结果?

谢谢!

编辑

型号是here

编辑2

我从QuerySet API尝试了一些东西

假设搜索查询是“akira”:

>>> akira_year = Lawyer.objects.filter(first__icontains="Akira").values_list('year_graduated').order_by('year_graduated')

>>> print akira_year
[(u'2000',)]

但是

>>> Lawyer.objects.filter(year_graduated__icontains=akira_year[0])
[]

没用。

任何人都可以帮助在这种情况下使用正确的语法吗?

谢谢

【问题讨论】:

  • 你必须多解释一下,你想要达到什么,因为现在很难理解。
  • 首先不要将搜索传递给模型,直接使用 django-sphinx 之类的东西,您必须发布您的模型以供其他人回答您的问题。
  • 我添加了模型的链接。
  • gruszczy:当用户搜索姓氏时,结果页面将返回所有同年毕业的律师姓名。此时,搜索返回所搜索姓氏的信息。谢谢。

标签: python django


【解决方案1】:

这个视图函数回答了这个问题:

def search(request):
    if 'q' in request.GET and request.GET['q']:
        q = request.GET['q']
        q_school = Lawyer.objects.filter(last__icontains=q).values_list('school', flat=True)
        q_year = Lawyer.objects.filter(last__icontains=q).values_list('year_graduated', flat=True)
        lawyers = Lawyer.objects.filter(school__icontains=q_school[0]).filter(year_graduated__icontains=q_year[0])        
        return render_to_response('search_results.html', {'lawyers': lawyers, 'query': q})
    else:
        return HttpResponse('Please submit a search term.')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 2011-10-08
    • 2012-03-19
    • 1970-01-01
    • 2023-03-30
    • 2023-03-25
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多