DjangoのAdminSiteのraw_id_fieldsは
ポップアップウィンドウで候補検索して選択できるので、
選択肢がいっぱいあるときとか便利。
ただし、ポップアップウィンドウが
ModelAdminのchangelist_viewを呼んでるので
選びたいだけなのに、change permissionがないと怒られる。
(https://code.djangoproject.com/ticket/11561)
ModelAdmin内のchangelist_viewのメソッドを
コピーして(changelist_view_readonlyとか)変更機能のないviewを実装してもいいけど、
もうちょっと楽な方法を。
かなりバッドノウハウだけど、
django/contrib/options.py
ModelAdminクラスのchangelist_viewメソッド内
if not self.has_change_permission(request, None):
raise PermissionDenied
をコメントアウトする。
そもそもchangelist_viewでは、permission持ってないと
テンプレート側でアクションボタンが表示されないので、
AdminSiteを使う管理者が自分だけとかならこれだけでOK。
ただし、非ブラウザ経由でcsrfトークン読んでPOSTリクエスト送ったら通りそう(未テスト)。
他に管理者がいたりして、セキュリティがザルでは困るときには
コメントアウトせずに、ifの条件式に
request.method=='POST'
とか、actionがある場合の条件を加えてみたりするのがいいかも。