Django:从视图函数向复选框提供选择列表
在我的 Django 应用程序中,我有一个带有 ChoiceField 的表单,通常允许在一系列整数值之间进行选择。
class FormNumber(forms.Form):
list=[]
for i in range(1, 11):
list.append((i,i))
number=forms.ChoiceField(choices=list, initial=1)
现在,在某些情况下,我需要使用较小的范围覆盖视图方法中的默认选择列表,但尝试以这种方式执行此操作时,
n=10-len(request.session["items"])
if n>0:
list=[]
for i in range(1, n+1):
list.append((i,i))
form=FormNumber(choices={'number':list}, initial={'number':1})
我收到 TypeError - __ init__() 获得了意外的关键字参数“选择”。我还尝试从表单类中删除参数,但得到了相同的结果。
有没有一种方法可以通过与上面类似的方式从视图中使用新的选择列表来初始化 ChoiceField ? 提前致谢 :)
in my Django application I've got a form with a ChoiceField that normally allows to choice between a range of integer values.
class FormNumber(forms.Form):
list=[]
for i in range(1, 11):
list.append((i,i))
number=forms.ChoiceField(choices=list, initial=1)
Now I need to override the default choices list from a view method in some cases, using a smaller range, but trying to do it in this way
n=10-len(request.session["items"])
if n>0:
list=[]
for i in range(1, n+1):
list.append((i,i))
form=FormNumber(choices={'number':list}, initial={'number':1})
I get a TypeError - __ init__() got an unexpected keyword argument 'choices'. I tried also to remove the parameters from the form class, but I get the same result.
Is there a way to initialize the ChoiceField with a new choices list from the view in a way similar to the one above?
Thanks in advance :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我把代码贴出来,也许将来有人需要解决类似的问题。
现在的表单代码是这样的:
我从视图中简单地调用它
I post the code, maybe someone in future needs to solve a similar problem.
The form code now is this one:
and I call it from the view simply with
我将向表单类
FormNumber
添加一个__init__(choices=None)
函数,并使用该函数初始化 ChoiceFieldnumber
,除非它是None
。如果未提供
choices
(默认为None
),初始化将执行默认情况下的操作。I would add an
__init__(choices=None)
function to the form classFormNumber
and initialize the ChoiceFieldnumber
using that unless it'sNone
.If
choices
is not provided (defaults toNone
), initialization would do what it does by default.