フィルタリングについて

19 views
Skip to first unread message
Message has been deleted
Message has been deleted

maru

unread,
May 7, 2009, 11:17:45 AM5/7/09
to django-ja
お世話になっております。maruです。

以前、検索ボックスを増やす方法をお聞きしましたが、
今回は前回と同じソース(動的にモデルを生成しています。
参考URL:http://bitbucket.org/MiCHiLU/my/src/tip/python/django/
dynamic_model/d...)
を使用している個所でのフィルタリング機能について質問させていただきます。


動的に生成されたモデルにはA,B,Cのように大きなリスト(ログイン後のトップ画面に表示されています。)があり、
Aを選択するとAの全レコードが表示されます。


しかし、現状ですとデータベース内のあるテーブル(Aテーブルとします)
Aテーブルのカラム1にあるデータすべてがフィルタリング対象となっています。
私が行いたいこととしましては以下になります。
例>
以下のようなテーブルが存在した場合、Aのレコードのみフィルタリング候補にしたいのです。
*Aテーブルは動的に生成されたモデルとフォーリンキーが張られています。
[Aテーブル]
カラム1 |カラム2 |カラム3|・・・
テスト1 |・・・ |・・・・・ |←Aのレコード
テスト2 |・・・ |・・・・・ |←Aのレコード
サンプル|・・・ |・・・・・ |←Bのレコード


ファイルタリング対象は、「テスト1とテスト2」のようになるようにしたいです。


上記参考URLの33行目にてlist_filterを使用しておりますので、
そのあたりでフィルタリングを絞れるのではないかと試行錯誤しております。


説明等わかりにくいかとは思いますが、
お力添えのほどよろしくお願いいたします。

Takanao Endoh

unread,
May 7, 2009, 3:15:44 PM5/7/09
to djan...@googlegroups.com
遠藤です

Django Adminのlist-filterはモデルフィールド(カラムの名前)を指定して使うことを想定したものです。
http://djangoproject.jp/doc/ja/1.0/ref/contrib/admin.html#list-filter

単にモデルフィールド「カラム1
」に「テスト」が含まれるもの以外のオブジェクトを排除したいのであれば、Aモデルのデフォルトマネジャを変更して、あらかじめAモデルのフィールド「カラム1」に「テスト」が含まれるオブジェクトのみを返すようにすると、よいのではないでしょうか。
http://djangoproject.jp/doc/ja/1.0/topics/db/managers.html#queryset

もっと複雑なクエリを発行したいのであれば、Django Adminをカスタマイズするよりも、viewを書くのがよいと思います。

Takanao Endoh
http://www.MiCHiLU.com
Sent from ???, ????, ??


2009/5/8 maru <s.marukawa...@nifmail.jp>:

makoto tsuyuki

unread,
May 7, 2009, 10:36:05 PM5/7/09
to django-ja
露木です。

Adminの検索だけ変更したいのであれば、モデルのデフォルトマネジャを変更するよりは、
ModelAdminのカスタマイズをした方が良いかもしれません。

例によって未来にわたって動作するか不明ですが、参考ソースコードのURLを貼付けておきます。
http://coderepos.org/share/browser/lang/python/every_resources/trunk/everes_core/admin.py
ModelAdminのquerysetを上書きしてスーパーユーザ以外は自分の登録したデータのみを対象
とするハックです。
条件によって検索条件を絞り込んだクエリセットを返せます。
requestが渡ってくるので、ゴリゴリできます。

私はAdminで何でもやりたくて無理するのが好きなのでこんなことをしていますが、遠藤さんの
いうとおりviewを書くのが良いかもしれません :)

以上、参考になれば。

On 5月8日, 午前4:15, Takanao Endoh <djm...@gmail.com> wrote:
> 遠藤です
>
> Django Adminのlist-filterはモデルフィールド(カラムの名前)を指定して使うことを想定したものです。http://djangoproject.jp/doc/ja/1.0/ref/contrib/admin.html#list-filter
>
> 単にモデルフィールド「カラム1
> 」に「テスト」が含まれるもの以外のオブジェクトを排除したいのであれば、Aモデルのデフォルトマネジャを変更して、あらかじめAモデルのフィールド「カラム1 」に「テスト」が含まれるオブジェクトのみを返すようにすると、よいのではないでしょうか。http://djangoproject.jp/doc/ja/1.0/topics/db/managers.html#queryset
>
> もっと複雑なクエリを発行したいのであれば、Django Adminをカスタマイズするよりも、viewを書くのがよいと思います。
>

> Takanao Endohhttp://www.MiCHiLU.com


> Sent from ???, ????, ??
>

> 2009/5/8 maru <s.marukawa-peacef...@nifmail.jp>:

maru

unread,
May 10, 2009, 9:23:31 AM5/10/09
to django-ja
露木様、遠藤様アドバイスありがとうございます。

お二方のアドバイスも参考にさせていただきましたが、
以下のやり方にて希望動作ができました。

フィールド定義をする際に、limit_choice_toを使用し、うまく絞ることができました。


現在のシステムでは、viewを使用していませんが、やはりviewを使用したほうがよさそうですね・・。

いつもご丁寧なアドバイスありがとうございます。
Reply all
Reply to author
Forward
0 new messages