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

django版本1.4.5

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

首先,写视图

 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后面的类型,若是非一对一的,会出错,需要修改,后面说解决方法

还有,需要注意 双 下划线

接下来写前端代码

 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是其中一个字段,注意连接方式(双下划线);这样写,就是搜索名字的

时间: 2024-11-13 08:09:29

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

Django_xadmin_TypeError: Related Field got invalid lookup: icontains

问题: 当我在给某一张表加上外键搜索的时候,会出现 TypeError: Related Field got invalid lookup: icontains 问题原因: a 表关联 b表,也就是说a表有外键关联b表,我们只需要在 b表中admin注册时候在admin类中添加外键搜索功能,那么在创建a表数据的时候,可以通过搜索拿到结果,那么这个错误来源不是这个字段 relfield_style 的错误,而是xadmin本身那个搜索框 search_fields的错误,因为b表中又有外键关联c表

在ECSHOP商品列表页和搜索页面,最后出现空商品的解决办法

有客户购买了我们的ecshop模板后,自己做了大量的修改和改动,后来出现了商品列表页面和搜索页面出现了多一个商品的问题.没有商品数据,但是多显示了一个商品的样式.下面就由我们68ecshop为大家解决一下这个问题吧!解决的方法如下:<!– {if $goods.goods_id} –> <!– {/if} –>代码框起来即可解决.

解决dede搜索页面只能显示10条信息解决方案

解决dede搜索页面只能显示10条信息解决方案,感觉显示的信息太少,这时就要想办法去解决一下.看看有什么好办法来解决一下这个问题. dede搜索页模板中,默认只能显示10条记录. 打开dede搜索页模板search.htm,发现标签搜索{dede:list perpage='10'} 即使修改了参数,如{dede:list perpage='20'},发现dede搜索页搜索的结果依然是一页10条记录. 两种方法可以解决这个问题: 1.可以在dede模板的开始搜索按钮前加入<input type=

使用Spring Mvc 转发 带着模板 父页面 之解决方法 decorators.xml

周末了,周一布置的任务还没完成,卡在了页面跳转上,接手了一个半截的项目要进行开发,之前没有人给培训,全靠自己爬代码,所以进度比较慢,而且加上之前没有用过 Spring Mvc 开发项目,所以有点吃力,不过接触了Spring Mvc近一个月的时间感觉 开发速度确实比 SSH快不少,不用一个一个的Bean去配置,直接扫描就OK了,可就是这样还是有些地方容易搞上一天也没搞多少进度,这不,被我新写的一个 Controller 的转发搞晕了,我本来要实现一个列表的分页查询,哪里想到点下一页的时候,除了我要

python Django注册页面显示头像

python Django注册页面显示头像(views) def register(request): ''' 注册 :param request: :return: ''' if request.method=='GET': obj = Register(request) return render(request, 'register.html', {'obj': obj}) else: obj = Register(request,request.POST,request.FILES) i

实现百度搜索页面网页遍历

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using mshtml; using System.Threading; using mshtml; namespace WindowsFormsApplication

django admin页面样式丢失问题

wamp 配置django admin页面样式丢失问题 第一种方法:在apache配置文件httpd.conf中加入如下代码:Alias /static "E:\Python27\Lib\site-packages\django\contrib\admin\static"<Directory "E:\Python27\Lib\site-packages\django\contrib\admin"> Options Indexes FollowSymLin

Django model :add a non-nullable field &#39;SKU&#39; to product without a default; we can&#39;t do that

You are trying to add a non-nullable field 'SKU' to product without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows) 2) Quit

destoon公司搜索页面显示公司类型

首先找到前台模板文件:/template/default/company/search.htm 看到51行 {template 'list-company', 'tag'} 打开 /template/default/tag/list-company.htm 查看数据字典后知道公司类型的字段名是type, 在第14行加入:[{$t[type]}] 前台页面刷新后发现是[],就是没搜索出这个字段. 原因应该是模型逻辑程序里没有搜索出这个字段来. 找到模型逻辑程序文件: /module/company