码迷,mamicode.com
首页 > 其他好文 > 详细

django搜索页面,并解决“Related Field has invalid lookup: icontains”错误

时间:2014-09-15 17:26:09      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   for   

django版本1.4.5

一般网站都是需要搜索栏目的,我的项目也需要,于是做了

首先,写视图

bubuko.com,布布扣
 1 #这个并不是我的项目,仅仅用它做个例子,解决相关问题
 2 from django.db.models import Q
 3 from models import Book
 4 
 5 def search(request):
 6     query = request.GET.get(q, ‘‘)
 7     if query:
 8         qset = (
 9                 Q(title__icontains=query) |
10                 Q(authors__first_name__icontains=query) |
11                 Q(authors__last_name__icontains=query)
12                 )
13 #注意上面的字段,他们在models里都是一对一的
14 #但是在我的项目里,author是外键,所以,这里有
15 #非一对一的字段时会出现错误,解决方法后面讲
16         results = Book.objects.filter(qset).distinct()
17     else:
18         results = []
19     return render_to_response("books/search.html", {
20         "results":results,
21         "query":query
22         })
Views.py

视图中,注意Q后面的类型,若是非一对一的,会出错,需要修改,后面说解决方法

还有,需要注意 双 下划线

接下来写前端代码

bubuko.com,布布扣
 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
 2 <html lang="en"> 
 3 <head> 
 4     <title>Search{% if query %} Results{% endif %}</title> 
 5 </head> 
 6 <body> 
 7   <h1>Search</h1> 
 8   <form action="." method="GET"> 
 9     <label for="q">Search: </label> 
10     <input type="text" name="q" value="{{ query|escape }}"> 
11     <input type="submit" value="Search"> 
12   </form> 
13 
14   {% if query %} 
15     <h2>Results for "{{ query|escape }}":</h2> 
16 
17     {% if results %} 
18       <ul> 
19       {% for book in results %} 
20         <li>{{ book|escape }}</l1> 
21       {% endfor %} 
22       </ul> 
23     {% else %} 
24       <p>No books found</p> 
25     {% endif %} 
26   {% endif %} 
27 </body> 
28 </html> 
search.html

很简单的代码,主要用于学习,注意escape,是用来转义的,防止某些特殊字符引起的安全问题

由于我的项目中author是一个外键,所以,使用上面的方法出现Related Field has invalid lookup: icontains错误

由于author字段不是一对一的,所以在使用时它会自动与自己的ID关联,也就是与其本身的主键关联,这样就乱了

所以出错了

解决方法,把原来的写成这样:Q(author__Name__icontains=query)

解释一下,author是一个表,Name是其中一个字段,注意连接方式(双下划线);这样写,就是搜索名字的

django搜索页面,并解决“Related Field has invalid lookup: icontains”错误

标签:style   blog   http   color   io   os   使用   ar   for   

原文地址:http://www.cnblogs.com/ypx-blackice/p/3973089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!