在我的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