2012-09-18 36 views
5

adminでユーザーの削除を無効にするdjangoアプリケーションがあります。私は、アクションを無効にしようとしており、削除許可をfalseに設定しようとしました。しかし、誰も働いていませんでした。Django admin - ユーザーの削除を無効にする

from django.contrib.auth.models import User 

class UserProfileAdmin(UserAdmin): 
    actions = None 

OR

def has_delete_permission(self, request): 
     return False 

OR

def get_actions(self, request): 
     actions = super(UserProfileAdmin, self).get_actions(request) 
     if 'delete_selected' in actions: 
      del actions['delete_selected'] 
     return actions 

admin.site.unregister(User) 
admin.site.register(User, UserProfileAdmin) 

しかし、私はそれが正常に動作している、ユーザー情報にインラインを追加するUSERADMINを使用しています。ですから、私はdjangoの管理者のユーザの削除を無効にする方法を提案してください。前もって感謝します。

+1

あなたは削除を無効にするために 'has_add_permission'をオーバーライドしていますか?また、削除操作をグローバルに無効にして、必要な場所に明示的に追加することをお勧めします。 – okm

+0

すみません。実際には 'has_delete_permission'です。私はここで間違いを犯した。削除アクションを無効にする方法については、サイト全体を参考にすることをお勧めします。しかし、ユーザーエントリを開くと、submit-row(saveボタン行)にdeleteオプションがあります。どのようにそれを無効にするには? – arulmr

答えて

16

トリックを行う必要がありますModelAdmin.has_delete_permissionのオーバーライド、あなたの呼び出しの署名が正しくありません、それはobjパラメータさらに

class UserProfileAdmin(UserAdmin): 
    def has_delete_permission(self, request, obj=None): # note the obj=None 
     return False 

を欠けている、単にreturn Falseは、あなたがしたいことがありDjangoの管理内の項目を削除することから管理者を含むすべてのスタッフを防ぎますそれらのスタッフを防ぐためにUser/Groupの権限を微調整してUser()を削除したくない場合は、delete_userprofiledelete_userの権限を削除してください。

+0

super_user自体の削除パーミッションを無効にします。また、 'has_delete_permission'は効果を示さなかった。 – arulmr

+0

@arulmr奇妙なことに、 'UserProfileAdmin'を正しく登録しましたが、Adminテンプレートの上書きはありませんか? 'import pdb;を入れてみてください。 'return'節の前に' has_delete_permission() 'の' pdb.set_trace() 'を呼び出すことで確実に呼び出されます。私は以下の私のコード与えている – okm

+0

: 'django.contrib.auth.modelsからはdjango.contrib.auth.adminインポートUSERADMINからユーザー をインポート クラスUserProfileAdmin(USERADMIN): デフhas_delete_permission(自己、リクエスト、OBJ =なし): import pdb; pdb.set_trace(); 返信False admin.site.unregister(ユーザー) admin.site。register(User、UserProfileAdmin) ' ** ** pdb **は呼び出されませんでした。ここのミスは何ですか?私は、このコメントではコードフォーマットがうまくいかないと思います。前もって感謝します。 – arulmr

-2

すべての管理変更フォームの下部にある「削除」ボタンを完全に削除することを目標にしている場合は、ファイル.../django/contrib/admin/templatetags/admin_modify.pyを変更して削除することができます。特に

、置き換える行:と

'show_delete_link': (not is_popup and context['has_delete_permission'] 
          and (change or context['show_delete'])), 

'show_delete_link': False, 

なしadminの変更フォームは、左下にある[削除]ボタンが表示されるはずです。

+2

djangoソースファイルを編集すると、他のすべてのアプリケーションに影響します。しかし、私は現在のアプリケーションでのみこれを達成したいと思います。 – arulmr

+0

ええ、もしあなたのdjangoをアップグレードしたいですか? –

+0

良い点。うまくいけば私の答えは打ち負かされた。 –

関連する問題