我正在使用django-nonrel进行测试项目。
启用管理界面并向数据库添加一些实体后,我将一个search_field添加到ModelAdmin类。当我试图搜索时出现以下错误:
DatabaseError:不支持查找类型'icontains'
为了解决这个问题,我添加了一个这样的索引:
from models import Empresa
from dbindexer.api import register_index
register_index(Empresa, {'nombre': 'icontains'})
但现在我收到以下错误:
如果为此查询指定,则第一个排序属性必须与inequality过滤器属性相同;收到密钥,预期为idxf_nombre_l_icontains
我是否尝试做django-nonrel和dbindex不支持的事情?
提前感谢您提供任何帮助
答案 0 :(得分:3)
我有同样的问题(在另一个案例中),知道它的原因,但目前没有解决方案。
这是因为GAE的数据库限制,如果查询包含不等式比较,那么'< ,> ,> ='或类似的东西,任何实体成员的任何排序(使用不等式比较的成员除外)必须首先对成员进行排序,首先进行不等式比较。
如果我们直接使用GAE的数据库,首先通过首先使用不等式的成员设置顺序,而不是根据您想要排序的任何内容进行排序,可以轻松克服此限制。
不幸的是,django-nonrel和djangoappengine的数据库包装器似乎无法做到这一点(我已经尝试使用django模型的第一个技术,仍然是错误,也许只是我),更不用说使用dbindexer了作为djangoappengine.db的包装器,它本身就是GAE数据库的包装......
Bottomline,调试对于这个烂摊子来说可能是一个地狱。您可能希望直接使用GAE数据存储区,或等待djangoappengine团队提出更好的替代方案。
答案 1 :(得分:1)
我通过更改ModelAdmin子类中的排序属性来修复它:
class EmpresaAdmin(admin.ModelAdmin):
search_fields = ('nombre',)
#order by the atribute autogenerated by dbindex
ordering = ('idxf_nombre_l_icontains',)
有谁知道更好的方法来解决这个问题?