3

我正在使用 django-nonrel 进行测试项目。

在启用管理界面并向数据库添加一些实体后,我在 ModelAdmin 类中添加了一个 search_field。当我尝试搜索时,出现以下错误:

DatabaseError:不支持查找类型“icontains”

为了解决这个问题,我添加了一个这样的索引:

from models import Empresa
from dbindexer.api import register_index

register_index(Empresa, {'nombre': 'icontains'})

但现在我收到以下错误:

如果为此查询指定了第一个排序属性,则必须与不等式过滤器属性相同;收到密钥,预期 idxf_nombre_l_icontains

我是否正在尝试做一些 django-nonrel 和 dbindex 不支持的事情?

提前感谢您的帮助

4

2 回答 2

3

我有同样的问题(在另一种情况下),知道它的原因,但目前没有解决方案。

这是因为 GAE 的数据库限制,如果查询包含不等式比较,即 ' < , > , >= ' 或类似的东西,实体的任何成员(使用不等式比较的成员除外)的任何排序) 之前必须先进行不等式比较的成员排序。

如果我们直接使用 GAE 的数据库,这个限制可以通过首先使用不等式的成员首先设置顺序来轻松克服,而不是使用您想要排序的任何内容进行排序。

不幸的是,django-nonrel 和 djangoappengine 的数据库包装器似乎无法做到这一点(我已经尝试了使用 django 模型的第一种技术的顺序,仍然错误,可能只是我),更不用说使用 dbindexer 作为包装器了djangoappengine.db 本身就是 GAE 数据库的包装器......

底线,调试对于这种混乱来说可能是地狱。对于这种情况,您可能希望直接使用 GAE 数据存储,或者等待 djangoappengine 团队提出更好的替代方案。

于 2011-11-23T16:12:22.800 回答
1

我通过更改 ModelAdmin 子类中的 ordering 属性来修复它:

class EmpresaAdmin(admin.ModelAdmin):
    search_fields = ('nombre',)
    #order by the atribute autogenerated by dbindex
    ordering = ('idxf_nombre_l_icontains',)

有谁知道解决这个问题的更好方法?

于 2011-07-13T14:51:45.777 回答