我使用'django nonrel'創建了一個應用程序,並使用'django dbindexer'來允許正常的Django查找。設置文件是如下Django查找類型(「iexact」,「icontains」,「month」等)不能在Django nonrel中使用(使用dbindexer)
的myproject/settings.py
from djangoappengine.settings_base import *
import os
DATABASES['native'] = DATABASES['default']
DATABASES['default'] = {'ENGINE': 'dbindexer', 'TARGET': 'native'}
AUTOLOAD_SITECONF = 'indexes'
SITE_ID = 1
SECRET_KEY = '=r-$b*8hglm+858&9t043hlm6-&6-3d3vfc4((7yd0dbrakhvi'
AUTH_PROFILE_MODULE = 'myapp.UserProfile'
DBINDEXER_BACKENDS = (
'dbindexer.backends.BaseResolver',
'dbindexer.backends.FKNullFix',
'dbindexer.backends.ConstantFieldJOINResolver',
)
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.sites',
'django.contrib.contenttypes',
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.staticfiles',
'django.contrib.messages',
'djangotoolbox',
'autoload',
'dbindexer',
'myapp',
'djangoappengine',
)
MIDDLEWARE_CLASSES = (
'autoload.middleware.AutoloadMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.request',
)
TEST_RUNNER = 'djangotoolbox.test.CapturingTestSuiteRunner'
ROOT_URLCONF = 'myproject.urls'
gettext = lambda s: s
SETTINGS_PATH = os.path.abspath(os.path.dirname(__file__))
temp = os.path.join(SETTINGS_PATH, os.pardir)
ROOT = os.path.join(os.path.normpath(temp))
STATIC_ROOT = os.path.join(ROOT, 'collected_static')
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
AUTH_PROFILE_MODULE = 'myapp.UserProfile'
我創建內部「的myapp」文件夾中的「dbindexes」文件中添加索引定義。
的myapp/dbindexes.py
from models import *
from dbindexer.lookups import StandardLookup
from dbindexer.api import register_index
register_index(myModel, {'first_name': 'icontains',
'last_name': 'icontains',
})
,並在主文件夾中的 '指標' 文件是這樣的:
indexes.py
from dbindexer import autodiscover
autodiscover()
現在,當我查詢' myModel'使用已註冊的索引,它總是返回一個空列表。似乎索引正在被正確發現,因爲它不會拋出任何錯誤。但是,當我在'myapp/dbindexes.py'文件中將'icontains'更改爲'contains'時,它會給出預期的結果。
有人能指導我解決問題。
謝謝!
感謝您的解釋。您建議使用數據存儲查看器(http://127.0.0.1:8000/_ah/admin/)來檢查數據是關鍵。一旦我們用新的查找修改'dbindexes.py',是否有其他方法可以重置已經索引的現有數據的實體列表? – 2013-04-24 06:45:03
您必須查詢所有實體,並再次保存。 dbindexer應該在保存時修復它。 – dragonx 2013-04-24 14:13:47
完美!非常感謝! – 2013-04-25 05:26:09