我有一个模型上的字段,如下:
class MyModel(models.Model):
status_field = models.NullBooleanField(blank=False,
verbose_name="Status",
choices=((True, 'Approved'),
(False, 'Denied'),
(None, 'Pending')))
我有一个关于这个模型的ModelForm。在这个ModelForm中,我想要有条件地动态移除其中一个选项。我目前正在尝试:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.status_field is not None:
self.fields['status_field'].choices.remove((None, 'Pending'))
print self.fields['status_field'].choices
我可以从打印语句中看出该选择确实被删除了。但是,当表单被渲染时,该字段的小部件仍然包括我删除的选项,我一定漏掉了些什么。
实际上,我的目标是防止该字段在提供了值之后变为None/null。为了方便用户,我想只需在下拉菜单中删除此选项即可。
感谢您的帮助!
status_field
为None的实例上使用表单,它也会消失。 - Josephlist()
调用来复制原始的choices
。看另一个更新。 - catavaran