在创建django表单时,'initial'参数必须首先出现?

时间:2010-07-16 12:36:52

标签: django forms

我有这个工作代码

f = SomeForm(request.POST)

当我尝试将其修改为

f = SomeForm(request.POST, initial={'spam', 4})

它没有用,'初始'没有被选中('spam'是一个ModelChoiceField),但当我尝试

f = SomeForm(initial={'spam', 4})

它有效(选择的值是正确的)。我在这里错过了什么吗?如果重要的话,那就是 init 方法看起来像什么

def __init__(self, *a, **ka):
    super(SomeForm, self).__init__(*a, **ka)
    ....#more codes

有没有办法让初始数据工作而不必删除第一个参数?谢谢

编辑:它不必是“初始”,只要我可以在ModelChoiceField上放置一些预先确定的值。条件=有一个request.POST,但表单尚未提交(帖子来自另一页)

2 个答案:

答案 0 :(得分:1)

原来我只需要更改数据属性。使用copy方法使QueryDict可变

post = request.POST.copy()

f = SomeForm(post)
f.data['spam'] = 4

答案 1 :(得分:0)

如果表单已发布,则无需传递initial。检查request.method并相应地实例化表单。