2012-04-15 9 views

答えて

1

ちょっと最近同様のものが必要でした。 this answersearch_fieldsで説明されているように、データベース内の列を表す属性でのみ機能し、プロパティーではでは機能しません。

しかし、あなたの__unicode__機能は、いくつかの他のモデル[内のフィールド]あなたはDjangoのクエリセットで行うのと同じ方法でsearch_fields adminにrelated field searchesを指定する方法について説明し this other answer一見の依存している場合。

+0

私は関連フィールドの検索で答えを見ました...しかし、私の** \ __ unicode __ **はいくつかのテーブルの組み合わせなので、検索はすべて一緒に行う必要があります。 –

2

search_fieldsタプルで述べたフィールドは

https://github.com/django/django/blob/master/django/contrib/admin/views/main.pyライン349から370

UPDを見て、SQLクエリを構築するために使用されているので、いいえ、それは不可能です。さて、別のフィールドを作成してそこに__unicode__メソッドの値を格納することができます。おそらく、それは醜く非効率的に見えますが、これによりデータベースの列をフィルタリングすることができます。 詳しい情報を教えてください__unicode__の仕組みを見てください。

UPD2あなたunicode方法:

def __unicode__(self): 
    return "%s%s%s%s-%s%s" % (
     self.factory.republic.code.upper(), 
     self.factory.location.region and self.factory.location.region.code or '00', 
     self.factory.location.code, 
     self.factory.code, 
     self.kind.code, 
     self.code 
    ) 

ジャンゴsearch_fieldsあなたが Catalog.objects.filter(**lookup_queries)を実行することはできませんので、もし、あなたが管理者にsearch_fieldsでそれを行うことはできません彼のORMメソッドを運営しています。残念ながら。

あなたはunicodeメソッドは6つのテーブルと他のプログラムロジックの結合で実際には異なります。このフィールドを検索するとSQL言語が複雑になり、インデックスは使用されません。結果をdbカラムに保存し、関連フィールドが更新されたときに更新してください。

+0

さて、あなたは検索をカスタマイズする方法を知っていますか? –

+0

"%s%s%s%s-%s%s"%(self.factory.republic.code.upper()、self.factory.location.regionおよびself.factory.location.region.codeまたは'00 '、self.factory.location.code、self.factory.code、self.kind.code、self.code) –

+0

これはカタログIDです。このフィールドを作成すると、関連するすべてのモデルの変更をフックする必要があります。 –

関連する問題