如何在管理界面中使模型完全只读?这是一种日志表,我在其中使用管理功能进行搜索、排序、过滤等,但不需要修改日志。
如果这看起来像重复的,这不是我正在尝试做的:
- 我不是在寻找只读字段(即使将每个字段设为只读仍然可以让您创建新记录)
- 我不想创建只读用户:每个用户都应该是只读的。
最佳答案
管理员用于编辑,而不仅仅是查看(您不会找到“查看”权限)。为了实现您想要的效果,您必须禁止添加、删除所有字段并将所有字段设置为只读:
class MyAdmin(ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
(如果你禁止改变你甚至看不到对象)
对于一些试图自动将所有字段设置为只读的未经测试的代码,请参阅我对 Whole model as read-only 的回答
编辑:也未经测试,但只是看了一下我的 LogEntryAdmin,它有
readonly_fields = MyModel._meta.get_all_field_names()
不知道这是否适用于所有情况。
编辑:QuerySet.delete() 仍然可以批量删除对象。要解决这个问题,请提供您自己的“对象”管理器和相应的不删除的 QuerySet 子类 - 参见 Overriding QuerySet.delete() in Django
关于django - Django 管理界面中的只读模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8265328/