gpt4 book ai didi

python - 无法在 django 中为 forms.ChoiceField 设置初始值

转载 作者:太空狗 更新时间:2023-10-29 21:06:12 24 4
gpt4 key购买 nike

大家

我想为 ChoiceField 设置初始值,而该值不在 ChoiceField 的选择中

以下是 ArticleForm 定义:

def ArticleForm(forms.Form):
choice = forms.ChoiceField(choices=[['a':'a'],['b':'b']])

然后我通过传递初始参数来实例化表单:

form = ArticleForm(initial={'choice':'Portrush'})

请注意初始值('Portrush')不是 ChoiceField('a' 和 'b')中定义的选项之一

如何设置初始值?任何建议表示赞赏。

最佳答案

可能是这样的:

class ArticleForm(forms.Form):
LETTER_A = 'a'
LETTER_B = 'b'
# look not a dict
CHOICES = ((LETTER_A,'letter a'),
(LETTER_B,'letter b'))

choice = forms.ChoiceField(choices=CHOICES)

def __init__(self, *args, **kwargs):
initial = kwargs.get('initial', {})
choice = initial.get('choice', None)

# set just the initial value
# in the real form needs something like this {'choice':'a'}
# but in this case you want {'choice':('a', 'letter_a')}
if choice:
kwargs['initial']['choice'] = choice[0]

# create the form
super(ArticleForm, self).__init__(*args, **kwargs)

# self.fields only exist after, so a double validation is needed
if choice and choice[0] not in (c[0] for c in self.CHOICES):
self.fields['choice'].choices.append(choice)


form = ArticleForm(initial={'choice':('c','other')})
form.as_p()
>>> u'<p><label for="id_choice">Choice:</label> <select name="choice" id="id_choice">\n<option value="a">letter a</option>\n<option value="b">letter b</option>\n<option value="c" selected="selected">other</option>\n</select></p>'

关于python - 无法在 django 中为 forms.ChoiceField 设置初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com