例如,对于此表单:
class CommentForm(forms.Form): name = forms.CharField(initial='class') action = forms.ChoiceField(...)
是否可以根据名称字段中的内容使操作字段中的选项不同?
bjp0bcyl1#
把 initial Package 在一个函数或lambda中如何,这样initial的值就被延迟到表单创建时。
class CommentForm(forms.Form): name = forms.CharField(initial=lambda : self.action) # or more complex logic action = forms.ChoiceField(...)
lxkprmvk2#
我确实注意到这个问题已经有13年的历史了,但它仍然是谷歌上的一个顶级结果,唯一的答案是错误的/当时就已经错了。这里有一种方法来更新Django字段的初始值,它依赖于表单中的另一个字段(这就是我一直在寻找的):
class CommentForm(forms.Form): name = forms.CharField(initial="class") action = forms.ChoiceField(...) def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.fields["action"].initial = your_custom_function(...)
如果需要更新ChoiceField /以限制外键选择(如上例所示):
class CommentForm(forms.Form): name = forms.CharField(initial="class") action = forms.ChoiceField(...) def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.fields["action"].queryset = get_your_queryset(...) # OR self.fields["action"] = forms.ChoiceField( choices=get_your_choices() )
2条答案
按热度按时间bjp0bcyl1#
把 initial Package 在一个函数或lambda中如何,这样initial的值就被延迟到表单创建时。
lxkprmvk2#
我确实注意到这个问题已经有13年的历史了,但它仍然是谷歌上的一个顶级结果,唯一的答案是错误的/当时就已经错了。
这里有一种方法来更新Django字段的初始值,它依赖于表单中的另一个字段(这就是我一直在寻找的):
如果需要更新ChoiceField /以限制外键选择(如上例所示):