0

基本クラスとして ModelAdmin を持つ約 50 の管理モデルがあります。50 モデルすべての削除機能を削除したいと考えています。2つの方法があると思います。

  1. has_delete_permission メソッドを再定義して false を返し、50 個のモデルすべての 'delete_selected' アクションを削除します (多くの作業)。
  2. 上記と同じことを django.contrib.admin.AdminModel で行います。ソースコードの変更を意味します。

ソースコードを変更したくありません。上記の2つの方法を期待して、これを行う他の方法はありますか?

4

1 に答える 1

0

3. これら 2 つの調整を含む管理 mixin クラスを作成し、既存の 50 の ModelAdmins の基本クラスに追加します。

4 . Monkeypatch ModelAdmin (50 だけでなく、すべてのモデルに影響します)

5. 管理者にモンキーパッチを適用します (すべてのアプリ モデルの場合は、登録済みの管理者を反復処理して、アプリに属する​​管理者と一致させることができます)

私は個人的には 3 を選びます。これらの ModelAdmin の共通点は他にもありますか? 基本クラス/ミックスインの追加は 1 回限りの作業であり、後で他の変更を非常に簡単に行うことができます。

PS: モデルが削除されていないことを確認したい場合は、デフォルトのマネージャーの QuerySet も削除されていないことを確認することをお勧めします: https://stackoverflow.com/a/6459797/640759

于 2012-04-09T22:25:14.970 に答える