Django Forms -一个字段的初始值可以依赖于另一个字段吗?

6yjfywim  于 2023-02-17  发布在  Go
关注(0)|答案(2)|浏览(115)

例如,对于此表单:

class CommentForm(forms.Form):
    name = forms.CharField(initial='class')
    action = forms.ChoiceField(...)

是否可以根据名称字段中的内容使操作字段中的选项不同?

bjp0bcyl

bjp0bcyl1#

initial Package 在一个函数或lambda中如何,这样initial的值就被延迟到表单创建时。

class CommentForm(forms.Form):
    name = forms.CharField(initial=lambda : self.action) # or more complex logic
    action = forms.ChoiceField(...)
lxkprmvk

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() )

相关问题