使用表格格式内联的模型时,readonly_fields函数在Django Admin中不起作用

时间:2019-02-14 12:08:54

标签: python django django-models

readonly_fields函数在单独的模型中使用时可以正常使用,但在tabularly inlined中的模型中不起作用。

仅当我们处理在admin页上彼此内联的模型时,有人才能帮助理解如何标记字段吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您只想在行内设置一个只读字段,则可以执行以下操作:

class SomethingInline(admin.TabularInline):
    model = Something
    extra = 0
    readonly_fields = ('field1',)

如果要使整个内联表单集在父表单上为只读,则可以尝试以下操作:

class SomethingInline(admin.TabularInline):
    model = Something
    extra = 0
    # Set all your fields here:
    readonly_fields = ('field1', 'field2', 'field3')

    # Or instead return all your fields here if this should be conditional:
    def get_readonly_fields(self, request, obj=None):
        return ('field1', 'field2', 'field3')

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

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

在上一个示例中,它将仍然呈现现有嵌入式项目的所有值,但是您不能从界面添加/编辑/删除。这实际上会使整个表单集变为只读。

注意:我没有重写has_change_permission()来返回False,因为那样会阻止显示现有项目。


如果您不想手动指定所有字段,请通过以下一种解决方案实施get_readonly_fields()Django admin - make all fields readonly