django modeladmin、只读字段与布尔字段
我有一个简单的模型,其中有一个布尔字段(就是可以是“真”或“假”的字段),还有相关的管理界面:
# in models.py
class MyModel(models.Model):
...
my_field = models.BooleanField(...)
# in admin.py
class MyModelAdmin(admin.ModelAdmin):
readonly_fields ("my_field", ...)
我的问题是,现在这个布尔字段总是显示为空,不管它实际的值是什么。
我找不到解决这个问题的方法,这个问题只发生在我身上吗?
我不知道这是否重要,但我使用的是grappelli版本2.4.5。
谢谢!
1 个回答
1
好的,
经过一番搜索,我找到了一种解决办法(虽然还有改进空间,但这是个不错的起点)。我在自己实现的 ModelAdmin
中重写了 get_form(...)
方法:
def get_form(self, *args, **kwargs):
form = super(SupplierAdmin, self).get_form(*args, **kwargs)
for field_name in self.fake_readonly_fields:
form.base_fields[field_name].widget.attrs["disabled"] = "disabled"
return form
我把只读字段的列表改名为 fake_readonly_fields
,这样就不会和 Django 的 readonly_fields
混淆了。这种方法适用于文本框、复选框和下拉选择框(我想单选按钮也可以,但我没验证过……)。现在我在寻找上传文件输入的解决方案……
顺便说一下,我不知道这个解决方案是否会引发“安全”问题(比如,有人可能通过特制的信息绕过我设置为禁用的 HTML 字段,传递新数据来覆盖旧值……)但这又是另一个(依然重要)话题。