Django 根据另一个字段值禁用字段

Nik*_*hin 6 python django

我是 django 新手,正在尝试解决问题。我有这个模型:

class MyModel(models.Model):
    value = models.CharField(max_length=50, choises=...)
    custom_value = models.CharField(max_length=50, blank=True)
Run Code Online (Sandbox Code Playgroud)

仅当值字段的值为“自定义”时,我才需要启用 custom_value 字段才能进行编辑。

rgi*_*gan 2

我假设当您说“启用编辑”时您指的是表单字段。我还假设加载表单时数据已保存在模型中。

在这种情况下,应在该型号的相应表格上完成此操作。您需要初始化要禁用的表单字段,然后在表单加载时启用它。

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        custom_value = self.fields.get('custom_value')
        if custom_value and custom_value.widget.attrs['value'] == 'CUSTOM':
            self.fields['value'].widget.attrs['disabled'] = 'false'
Run Code Online (Sandbox Code Playgroud)

我知道您的代码只是一个示例,但用作value类属性名称会令人困惑。

如果您希望在一个表单上动态执行此操作,例如让用户选择一个选项,然后看到另一个选项在不刷新浏览器的情况下启用,则必须在 Javascript 中完成。这就是您仅使用 Django 表单即可完成的操作。