django - Django Admin - 预填充字段并设置为只读
问题描述
我想在创建或更新对象时自动在模型中设置一个字段(当前用户)并将其设为只读,因此用户无法更改它:
为了预填充该字段:
@admin.register(Model)
class ModelAdmin(admin.ModelAdmin):
list_display = ('field_1', 'user')
def get_form(self, request, obj=None, **kwargs):
form = super(ModelAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['user'].initial = request.user
return form
这可行,但是当我想使用以下方法将字段设为只读时:
readonly_fields=('user', )
该应用程序因错误而崩溃:
KeyError at /admin/api/model/add/
'user'
任何人都可以帮助我并解释我如何使用 django admin 来实现我的目标吗?
谢谢!
解决方案
我发现的一个解决方法是:
form.base_fields['user'].disabled = True
您还可以通过以下方式添加帮助文本:
form.base_fields['user'].help_text = "some help text"
所以在你的代码中它将是:
def get_form(self, request, obj=None, **kwargs):
form = super(ModelAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['user'].initial = request.user
form.base_fields['user'].disabled = True
form.base_fields['user'].help_text = "This field is not editable"
return form
然后你不必使用readonly_fields
推荐阅读
- c++ - 在不迭代的情况下在两个映射中找到共同值
- node.js - 默认 Firebase 应用已存在。这意味着您不止一次调用了 initializeApp()
- android - 如何获取数组中索引的颜色值?
- html - 页脚没有像应有的那样停靠到底部
- bash - Bash For 循环中的奇怪行为
- python - 如何使用 python 标准库在 html 页面中嵌入干净的脚本
- flutter - 带有 ListView 的 Flutter Stepper 未呈现
- python - 工作的网络爬虫,突然不再工作了
- geocoding - 反向地理定位。加载 api/geocode 我得到 SyntaxError: Unexpected token ':'。解析错误
- python - 二维码在 tkinter GUI python 中显示