当前位置: 首页 > 面试题库 >

整个模型为只读

史智志
2023-03-14
问题内容

有没有办法在django管理员中将模型设为只读?但我的意思是整个模型。因此,没有添加,没有删除,没有更改,只是将对象和字段视为只读?


问题答案:

ModelAdmin提供了钩子get_readonly_fields()-以下内容未经测试,我的想法是确定模型管理员执行此操作的所有字段,而不会涉及只读字段本身的递归:

from django.contrib.admin.util import flatten_fieldsets

class ReadOnlyAdmin(ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        if self.declared_fieldsets:
            fields = flatten_fieldsets(self.declared_fieldsets)
        else:
            form = self.get_formset(request, obj).form
            fields = form.base_fields.keys()
        return fields

然后子类化/混合该管理员,无论它应该是只读管理员。

对于添加/删除,并使它们的按钮消失,你可能还需要添加

    def has_add_permission(self, request):
        # Nobody is allowed to add
        return False
    def has_delete_permission(self, request, obj=None):
        # Nobody is allowed to delete
        return False

PS:在ModelAdmin中,如果has_change_permission(查找或你的替代)返回False,则你无法进入对象的更改视图-甚至不会显示该对象的链接。如果这样做的话,实际上会很酷,并且默认的get_readonly_fields()检查了更改权限,并在这种情况下将所有字段设置为readonly,就像上面一样。这样,非更改者至少可以浏览数据…就像詹森斯指出,鉴于当前的管理结构假定view = edit,这可能需要在添加/更改/删除之上引入“查看”权限…

编辑:关于将所有字段设置为只读,也未经测试,但看起来很有希望:

readonly_fields = MyModel._meta.get_all_field_names()

编辑:这是另一个

if self.declared_fieldsets:
    return flatten_fieldsets(self.declared_fieldsets)
else:
    return list(set(
        [field.name for field in self.opts.local_fields] +
        [field.name for field in self.opts.local_many_to_many]
    ))


 类似资料:
  • 高亮显示对象 勾选了这个选项,当移动滑鼠光标到一个对象时,Navicat 将以蓝色高亮显示它的边界。提示:需要重新启动 Navicat 才生效。 高亮显示有关联的 勾选了这个选项,当移动滑鼠光标到一个表或视图时,Navicat 将以蓝色或绿色高亮显示它的外键或视图关系。提示:需要重新启动 Navicat 才生效。 猜测字段类型 勾选了这个选项,当设计表或实体的字段时,Navicat 将预计字段的类

  • 问题内容: 如果你是从Google来这里寻找模型的人,请跳过我的问题,然后跳到第一个答案。我的问题只会使你感到困惑。 在Django中,有没有一种很好的方法可以将整个模型对象集合到一个字典中?我的意思是,像这样: …结果是字典,键/值对由模型中的记录组成?还有其他人认为这对他们有用吗? 谢谢。 我只想添加的 更新 是,我的最终目标是能够在模板内进行简单的变量查找。就像是: 结果为DictModel

  • 我正在写一个库在Java,我需要转换(地图)一个模型到另一个,反之亦然。我所做的是实现了一个包含两个泛型类型的抽象转换器类,包含convertTo和convertFrom方法,并从它扩展了我的转换器。 但是对于特定的实现,我可能还需要其他对象来进行转换,我不知道什么是实现这些东西的最佳实践。我想过适配器和门面,但他们似乎不符合我的要求。有没有一个设计模式我可以用来做这个?提前谢谢你。

  • 我知道number包括integer,但我可以明确定义一个“type”:“integer”。我是说这会违反规范吗?

  • 问题内容: 如何在管理界面中将模型完全设为只读?它用于一种日志表,我在其中使用管理功能来搜索,排序,过滤等,但无需修改日志。 万一这看起来像是重复的,这不是我想要做的: 我不是在寻找只读字段(即使将每个字段都设为只读也可以让你创建新记录) 我不是要创建一个只读用户:每个用户都应该是只读的。 问题答案: templates / admin / view.html templates / admin

  • 我有一个多模块梯度构建。我想使用root为一个模块执行目标。例如: