0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?