禁用Django表单ChoiceField的所有选项,保留默认选项
基本上,我想做的是:
我希望能根据用户的不同,让某些字段变成只读状态。
到目前为止,这个过程很简单,但问题来了,我需要让一些下拉选择框变成只读,但它们和只读状态不太兼容。问题是,用户仍然可以操作这些选择框,尽管新的值不会被提交。我希望这个选择框是禁用的,但如果我这样做,值就不会通过POST发送,这样表单的有效性就会出现问题。
经过一番研究,我明白了,唯一的办法就是禁用所有字段,除了默认选中的那个?
这怎么实现呢?
这是我目前的代码:
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super(TeamForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk is None:
self.fields['division'].initial = 1
user_role = self.user.memberaccount.get_role()
if user_role != 'admin':
这是我想要禁用选项的地方……
非常感谢你的帮助,
Ara
1 个回答
0
我看到这里有两个可能的选择:
创建一个自定义的小部件,这样可以显示一个禁用的下拉框,同时有一个隐藏的输入框来存放要提交的值。你可以参考这个链接了解更多:https://docs.djangoproject.com/en/dev/ref/forms/widgets/#customizing-widget-instances
将这个字段设置为不必填写(required=False),然后在你的表单里创建一个叫做 clean_division() 的方法,如果这个字段没有被提交,就自动填充它:https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute