Django:根据其他字段的值使字段可编辑

时间:2013-12-24 01:53:08

标签: python django

我是Django的新手,我在广泛的文档中还没有找到答案。我要求研究的指针,而不是工作代码。话虽如此,这是我的问题:

在我的一个模型中有一个BooleanField(它在管理表单中呈现为一个复选框)。我们称之为'A'。如果选中A,则编辑其他字段(例如,CharField'B')才有意义。

那么,有没有办法让B只读,或者甚至将其内容更改为空字符串,如果选中A则会显示为空?谢谢。

(Django 1.5.2,Python 2.7.5)

1 个答案:

答案 0 :(得分:3)

你需要做几件事来完成这项工作。您可以跳过其中一些,具体取决于您是否主要关注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