3

django-nonrel を使用してテスト プロジェクトに取り組んでいます。

管理インターフェイスを有効にして、いくつかのエンティティをデータベースに追加した後、search_field を ModelAdmin クラスに追加しました。検索しようとすると、次のエラーが表示されました。

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 を使用することは言うまでもありませんそれ自体がGAEのデータベースのラッパーであるdjangoappengine.dbの......

要するに、デバッグはこの混乱の地獄になる可能性があります。この場合だけ 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 に答える