在我的Django项目中,汇总了NBA球员的统计数据(作为一个学习项目),我建立了一个简单的搜索视图,允许您按姓名(或两者)搜索球员。它在开发服务器上工作良好,但现在我想使用Google App Engine部署我的网站,并且我收到了我认为是由于GAE的高复制数据存储导致的错误。在Django App Engine上运行简单的Django搜索?
我的印象是,Django-nonrel/dbindexer工具可以帮助缓解这个问题,但到目前为止,我已经尝试实施它们无济于事 - 当我尝试在我的网站上进行搜索时,出现带有消息的错误日志:'DatabaseError:该查询不受数据库支持。'
我猜我的问题可能是这些工具的指令分布在多个文档中,这些文档在开发过程中的不同点上编写,因此我很难将它们放在一起成为一个连贯的图片。另外,我已经看过他们提供的testapp,它似乎设置的有点不同于他们的说明。所以我想问两个问题:
1)我编码的视图甚至可以与GAE和Django-nonrel/dbindexer一起使用吗?那就是:
def search(request):
query = request.GET.get('q','')
querywords = query.split(' ')
lname=''
for word in querywords[1:-1]:
lname += word+' '
lname += querywords[-1]
if query:
if len(querywords)>1:
qset = (
Q(first_name__iexact=querywords[0]) &
Q(last_name__iexact=lname)
)
exact_results = Player.objects.filter(qset).distinct()
if exact_results != []:
result = exact_results
qset = (
Q(first_name__icontains=querywords[0])|
Q(last_name__icontains=querywords[0])|
Q(first_name__icontains=lname)|
Q(last_name__icontains=lname)
)
results = Player.objects.filter(qset).distinct()
results = results.order_by('last_name','first_name')
else:
qset = (
Q(first_name__icontains=querywords[0]) &
Q(last_name__icontains=lname)|
Q(first_name__icontains=querywords[0])|
Q(last_name__icontains=querywords[0])
)
results = Player.objects.filter(qset).distinct()
results = results.order_by('last_name','first_name')
result = ''
else:
qset = (
Q(first_name__icontains=querywords[0])|
Q(last_name__icontains=querywords[0])
)
results = Player.objects.filter(qset).distinct()
results = results.order_by('last_name','first_name')
result = ''
else:
results = []
result = ''
return render(request,'search.html', {
'result':result,
'results': results,
'query': query,
'querywords':querywords
})
2)如果可以使用,而我在开发项目结构如下,什么是最节俭的一系列步骤,我可以跟着做我的搜索视图正常工作在GAE ?
NBA/
__init__.py
manage.py
settings.py
urls.py
templates/
(html files)
players/
__init__.py
admin.py
models.py
tests.py
views.py
fixtures/
(some .yaml fixture files)
static/
(css, js, and gif files)
你是什么意思,它在开发服务器上工作正常?它在dev_appserver上正确运行? – dragonx 2012-07-19 04:52:25
我的意思是当我使用“python manage.py runserver”运行我的项目时,我的代码完全按照我的需要工作。 – GChorn 2012-07-19 06:12:32
我不清楚你是运行django项目还是运行django-nonrel项目。这听起来像你建立了一个非GAE django项目,并试图让它在GAE上工作。我现在困惑的是我期望如果你正确设置它,你应该在本地看到同样的故障。我没有在您的树中看到app.yaml或django文件夹,这对于您的GAE项目来说是必需的。 – dragonx 2012-07-19 14:54:11