在django中编写自定义搜索的最佳方法是什么

时间:2013-04-08 07:40:36

标签: python django

我正在使用django作为我的应用程序。我是新手。   我的表单中有多个字段,用户可以从中执行搜索   我有像学生有很多科目的关系层次,然后科目有很多作业,而且作业有很多形式

我将表格分成三个部分,每个部分有3-4个字段来搜索e,g

 STUDENT DATA
  Name:
  StudentID
  city

  SUBJECTS DATA
  Start daTE
  NAME
  CREDITS

  ASSIGNEMENT DATA
  marks
  date_issue
  credits

我将根据这些seacrh标准返回学生名单,他们将是部分匹配。

我是django si的新手,我不知道如何继续过滤搜索,因为搜索也是嵌套的objcets

我可以执行一个列搜索,如

Student.objects.filter(sbjects__icontains="math") 但我不知道如何同时搜索所有

任何人都可以告诉我如何继续

3 个答案:

答案 0 :(得分:1)

所以看来你正在寻找OR查询?这样的事情:

from django.db.models import Q
Student.objects.filter( Q(subjects__icontains="math") | Q(name="John") )

文档:

https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

答案 1 :(得分:1)

def your_view(request):
    students = Student.objects.filter()

    if request.GET.get('student'):
        students = students.filter(
            Q(name__contains=request.GET['student']) |
            Q(studentID__contains=request.GET['student']) |
            Q(city__contains=request.GET['student'])
            )

    if request.GET.get('subjects'):
        students = students.filter(
            Q(name__contains=request.GET['subjects']) |
            Q(credits__contains=request.GET['subjects'])
            )

    //more search here

    return render(request, 'page.html', {'students': students})

答案 2 :(得分:0)

我建议你在django-haystack插件上抓一个战利品。它允许您使用类似模型的对象制作扁平索引,然后在其中进行搜索。

您可以随时使用Q对象和icontains查找,但对于相对大量的数据来说速度会很慢。