2012-03-05 25 views
2

私はアプリを持っていて、私はdjangoの管理者を使っていますが、私のアプリはデータの削除を許可しておらず、djangoの管理者はdeleteのボタン/リンクを持っています。私はすでにdelete actionを削除しました。djangoのボタン/リンクを削除するadmin

私の質問は、どうすればdjangoの管理ページのdeleteボタン/リンクを削除できますか?

答えて

7

管理者は何も削除したり変更したりしないでください。

代わりに、特定のモデルを削除するユーザー/グループの権限を削除します。ユーザーに削除権限がない場合、そのモデルに関連するページには削除ボタンは表示されません。

8
class MyAdmin(ModelAdmin): 

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

    def has_delete_permission(self, request, obj=None): 
     return False 

削除権限が与えられていない場合、1つのオブジェクトの「削除」ボタンが消えます。チェンジリストの "アクション"(チェックボックスをオンにしたオブジェクトに適用するリストを選択)は、オブジェクトの一部を削除する権限を持つ可能性があるため、引き続き表示されます。上記のコードで両方を削除することができます。

CLARIFICATION(ダウンワードの場合):管理者は、現在のユーザーが削除する権限を持っているかどうかをチェックし、それに応じてボタンを表示/非表示にします。あなたは「私のアプリは削除を許可していません」と書いたので、あなたが許可を取り去ったと仮定しました。スーパーユーザーは権限で検索されません。スーパーユーザーは常に「はい私はその権限を持っています」を返します。スーパーユーザーのためにボタンを消したい場合は、上記のコードを使用する必要があります。他のユーザーにとっては、Secatorの回答ごとに許可を取り除くだけです。

+0

私はこの説明のためにユースケースを提供していると思います。彼らの栄光の中でベストプラクティス(意図的なものはない)にもかかわらず、多くのクライアントは完全なスーパーユーザーアクセスで終わるので、現実的な状況では、これは人々が物事を破壊するのを防ぐ最善の方法です。 – kungphu

+0

偉大な答え、ありがとう –

+0

あなたが書いていないアプリを実行している可能性があり、スーパーユーザになるようにユーザを要求するようにコードされている状況もあります。 –

関連する問題