2

モデルの__unicode__メソッドをsearch_fieldsタプルに含める方法はありますか? この値は他のいくつかのモデルに依存するため、モデルに__unicode__の結果を格納するための特別なフィールドを作成したくありません...

4

2 に答える 2

2

いいえ、できません。search_fieldsタプルに記載されているフィールドは SQL クエリの作成に使用されるためです。

https://github.com/django/django/blob/master/django/contrib/admin/views/main.py行 349-370 を見てください

アップデート。別のフィールドを作成して、__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
    ) 

Djangosearch_fieldsは彼の ORM メソッドを操作するため、実行できない場合 は管理者で実行Catalog.objects.filter(**lookup_queries)できません。search_fields不運にも。

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

于 2012-04-15T12:53:21.520 に答える
1

ねえ、最近似たようなものが必要でした。この回答 で説明されているようsearch_fields に、プロパティではなく、データベース内の列を表す属性でのみ機能します

ただし、__unicode__関数が [フィールド内] に依存している場合、他のいくつかのモデルがこの他の回答を見て 、Django クエリセットで行うのと同じ方法で、管理者の search_fields で関連するフィールド検索を指定する方法を説明しています。

于 2012-04-15T12:48:44.980 に答える