我是Django的新手,在大量的文档中还没有找到答案。我要的是研究的指针,而不是工作代码。话虽如此,我的问题是:
在我的一个模型中,有一个BooleanField (它以checkBox的形式呈现在管理表单中)。我们叫它“A”吧。只有当A被选中时,才有意义编辑其他字段(例如,CharField 'B')。
那么,如果选中A,是否有办法使B只读,甚至将其内容更改为空字符串?谢谢。
(Django 1.5.2,Python 2.7.5)
发布于 2013-12-24 02:36:39
你需要几样东西才能做到这一点。如果您主要关心UI或数据库中的数据完整性,您可能可以跳过其中的一些。
由于用户可以(想必)在客户端选中/取消选中字段A,因此需要一些Javascript来启用/禁用字段B的外观。这些文档展示了如何在ModelAdmin类中加载自定义JS:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#modeladmin-asset-definitions
在您的ModelForm中,您可能希望在__init__方法中根据self.instance.field_a的值进行一些检查,并以某种ReadOnlyWidget代替字段B,以替代表单的初始显示。这些文档展示了如何为ModelAdmin提供一个自定义表单类:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form
如果要动态地编写Javascript,那么跳过这一步只需在客户端完成就更容易了。
最后,如果选中字段A,则可以使用Django模型验证来确保字段B使用空值保存:
https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects
https://stackoverflow.com/questions/20753810
复制相似问题