django-non rel和dbindexer命令属性

时间:2011-07-12 21:48:33

标签: django google-app-engine django-nonrel

我正在使用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不支持的事情?

提前感谢您提供任何帮助

2 个答案:

答案 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',)

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