Help us understand the problem. What is going on with this article?

Djangoのraw_id_fieldsが変更権限を要求する問題(#11561)を回避するバッドノウハウ

More than 5 years have passed since last update.

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がある場合の条件を加えてみたりするのがいいかも。

kokardy
仕事は病院薬剤師だけど、気持ちはエンジニア。支援士資格の維持費用がつらい。 Python,Goがメインだけど、他の言語も気になるのはちょいちょい触ってみたりします。 DBはPostgreSQLがメイン。 Dockerは便利。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away