gpt4 book ai didi

python - Django 查找类型 ("iexact"、 "icontains"、 "month"等)在 Django nonrel 中不起作用(使用 dbindexer)

转载 作者:行者123 更新时间:2023-11-28 17:47:20 25 4
gpt4 key购买 nike

我使用“django nonrel”创建了一个应用程序,并使用“django dbindexer”来允许正常的 Django 查找。设置文件如下

我的项目/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”文件来添加索引定义。

我的应用程序/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”文件中将“图标”更改为“包含”时,它给出了预期的结果。

有人可以指导我解决问题。

谢谢!!!

最佳答案

dbindexer 本质上会自动反规范化您的实体并添加额外的可索引字段以帮助查询。例如,GAE 不执行不区分大小写的搜索或子字符串搜索,因此如果您需要使用 icontains,它会生成小写子字符串列表并将其存储在可索引的 ListField 中。当您编写实体时会发生这种情况。

请注意,这最终可能会非常昂贵,因为它会使您的数据存储和使用的索引膨胀。

运行查询时,您只能查询数据存储中的实体。如果您的 dbindexes.py 在某一时刻指定了 contains,那么实体将被创建为带有 contains 的搜索字段,并且对 icontains 的查询将不会找不到你要找的东西。如果您添加新实体,并且它们写入了正确的可索引数据,那么它们应该是可查询的,但旧实体不会在查询中返回。

您可以使用数据存储查看器查看与您的实体一起写入的 dbindexer。如果某些实体没有额外的 dbindexer 生成的属性,那么这些查询将不会返回。您可以通过读取和写入所有实体来解决此问题,以便 dbindexer 更新字段。

关于python - Django 查找类型 ("iexact"、 "icontains"、 "month"等)在 Django nonrel 中不起作用(使用 dbindexer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com