from django.shortcuts import render
from django.db.models import Q
from models import Book
from django.shortcuts import render_to_response
from django import forms
from forms import ContactForm
# Create your views here.
def search(request):
query = request.GET.get('q','')
if query:
qset=(
Q(title_icontains=query) |
Q(authors_first_name_icontains=query) |
Q(authors_last_name_icontains=query)
)
results=Book.objects.filter(qset).distinct()
else:
results=[]
return render_to_response(r"search.html",{
"results":results,
"query":query
})
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
else:
form=ContactForm()
return render_to_response('contact.html',{'form':form})
TOPIC_CHOICES = (
('general','General enquiry'),
('bug','Bug report'),
('suggestion','Suggestion'),
)
class ContactForm(forms.Form):
topic = forms.ChoiceField(choices=TOPIC_CHOICES)
message = forms.CharField()
sender = forms.EmailField(required=False)
ERROR
FieldError at /search/
Cannot resolve keyword 'title_icontains' into field. Choices are: authors, id, num_pages, publication_date, publisher, publisher_id, title
Request Method: GET
Request URL: http://127.0.0.1:8000/search/?q=authors
Django Version: 1.8.6
Exception Type: FieldError
Exception Value:
Cannot resolve keyword 'title_icontains' into field. Choices are: authors, id, num_pages, publication_date, publisher, publisher_id, title
Exception Location: C:\Python27\lib\site-packages\django-1.8.6-py2.7.egg\django\db\models\sql\query.py in names_to_path, line 1397
Python Executable: C:\Python27\python.exe
Python Version: 2.7.11
Python Path:
['D:\\Users\\rongweiwei799\\mysite',
'C:\\Python27\\lib\\site-packages\\python_docx-0.8.5-py2.7.egg',
'C:\\Python27\\lib\\site-packages\\selenium-2.53.1-py2.7.egg',
'C:\\Python27\\lib\\site-packages\\django-1.8.6-py2.7.egg',
'C:\\Python27\\python27.zip',
'C:\\Python27\\DLLs',
'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk',
'C:\\Python27',
'C:\\Python27\\lib\\site-packages']
Server time: Thu, 5 May 2016 18:25:22 +0800
你去看看models部分,应该是
title__icontains
,注意是__
,而不是_
icontains是不区分大小写模糊匹配,查询时用 字段__icontains=值 中间是两个下划线,楼上正解