我们正在使用 Wagtail 4.1 并正在寻找一种方法使管理员中的某些字段不可编辑(只读)。
普通的 Django 技术,如在表单字段上设置
widget.attrs['readonly'] = True
,在 Wagtail 中对大多数字段类型不起作用。我认为这是因为 Wagtail 管理员用动态生成的 javascript 支持的字段替换了所有香草 <input>
元素,这些字段看起来很棒,但不尊重表单字段的“只读”属性或您可能对底层 进行的任何其他更改<input>
.
据我所知,Wagtail 没有提供任何内置机制来将管理字段设置为只读。也许我需要编写自己的自定义 javascript 来覆盖 Wagtail 表单中的行为?
任何帮助将不胜感激。
此功能将在 Wagtail 5.1 中可用。但与此同时,您可能需要自己动手。
在我们知道这是出来之前我们所做的是使用自定义表单,然后在表单的初始化中,我们为每个需要只读的字段执行以下操作:
# CSS is in place to check for the readonly attribute and .editor-readonly class
# add readonly attribute for inputs
self.fields['title'].widget.attrs['readonly'] = 'readonly'
然后css是
form#page-edit-form {
section.editor-readonly {
input:read-only {
background-color: #e9ecef;
outline: none;
pointer-events: none;
}
}
}
有了这个,字段仍然在表单中提交,但不能从浏览器中更改。如果您的用户比我们的用户更狡猾,您可能需要检查 clean 方法中的更改。 (我们需要将字段与表单一起提交,因为我们需要几个必填字段,例如 title 和 slug 是只读的。)