1. ホーム
  2. django

[解決済み] Django の管理画面で読み取り専用モデル?

2023-03-10 10:45:41

質問

管理画面でモデルを完全に読み取り専用にするにはどうしたらよいでしょうか。ログテーブルのようなもので、検索、ソート、フィルタなどのために管理機能を使用していますが、ログを変更する必要はありません。

これが重複しているように見える場合に備えて、以下は ではなく でないものです。

  • 私は、読み取り専用の フィールド (すべてのフィールドを読み取り専用にしても、新しいレコードを作成することはできます)
  • 私は、読み取り専用の ユーザー : すべてのユーザは読み取り専用であるべきです。

どのように解決するのですか?

参照 https://djangosnippets.org/snippets/10539/

class ReadOnlyAdminMixin(object):
    """Disables all editing capabilities."""
    change_form_template = "admin/view.html"

    def __init__(self, *args, **kwargs):
        super(ReadOnlyAdminMixin, self).__init__(*args, **kwargs)
        self.readonly_fields = [f.name for f in self.model._meta.get_fields()]

    def get_actions(self, request):
        actions = super(ReadOnlyAdminMixin, self).get_actions(request)
        del_action = "delete_selected"
        if del_action in actions:
            del actions[del_action]
        return actions

    def has_add_permission(self, request):
        return False

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

    def save_model(self, request, obj, form, change):
        pass

    def delete_model(self, request, obj):
        pass

    def save_related(self, request, form, formsets, change):
        pass

テンプレート/admin/view.html

{% extends "admin/change_form.html" %}
{% load i18n %}

{% block submit_buttons_bottom %}
  <div class="submit-row">
    <a href="../">{% blocktrans %}Back to list{% endblocktrans %}</a>
  </div>
{% endblock %}

templates/admin/view.html (Grappelli用)

{% extends "admin/change_form.html" %}
{% load i18n %}

{% block submit_buttons_bottom %}
  <footer class="grp-module grp-submit-row grp-fixed-footer">
    <header style="display:none"><h1>{% trans "submit options"|capfirst context "heading" %}</h1></header>
    <ul>
       <li><a href="../" class="grp-button grp-default">{% blocktrans %}Back to list{% endblocktrans %}</a></li>
    </ul>
  </footer>
{% endblock %}