readonly_fields
函数在单独的模型中使用时可以正常使用,但在tabularly inlined
中的模型中不起作用。
仅当我们处理在admin
页上彼此内联的模型时,有人才能帮助理解如何标记字段吗?
谢谢。
答案 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