В моем проекте Django, который собирает статистику игроков NBA (в качестве учебного проекта), я создал простое представление поиска, которое позволяет вам искать игроков по имени или фамилии (или по обоим). Он отлично работает на сервере разработки, но теперь я хочу развернуть свой сайт с помощью Google App Engine, и я получаю ошибки, которые, как я полагаю, связаны с хранилищем данных высокой репликации GAE.
У меня сложилось впечатление, что Инструменты Django-nonrel/dbindexer помогли бы решить эту проблему, но до сих пор я безуспешно пытался их внедрить - когда я пытаюсь выполнить поиск на своем сайте, я получаю журнал ошибок с сообщением: «DatabaseError: этот запрос не поддерживается базой данных».
Я предполагаю, что моя проблема может заключаться в том, что инструкции для этих инструментов разбросаны по нескольким документам, написанным на разных этапах их разработки, поэтому мне сложно собрать их вместе в одну связную картину. Кроме того, я просмотрел предлагаемое ими тестовое приложение, и, похоже, оно настроено несколько иначе, чем предлагается в их инструкциях. Итак, я хотел бы задать два вопроса:
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) Если его можно использовать, и мой проект в dev структурирован следующим образом, каков наиболее экономный набор шагов, который я могу выполнить, чтобы мое представление поиска работало правильно в 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)