在Django中为formset中的字段设置默认值

时间:2010-12-07 15:58:25

标签: python django

在Django的formset中,我们如何为需要http会话值的字段设置默认值?由于需要会话来获取值,因此我们无法在模型类本身中设置默认值。在保存在视图函数中之前,我无法理解如何在formset中显式设置每个表单中的值。

在FormSet的构造中设置初始属性会起作用,但无论出于何种原因,我都会遇到编译错误。代码是这样的:

formset = LineItemsInlineFormSet(initial=[{'updated_by':'user'}])

编译错误是: init ()得到意外的关键字参数'initial'

我正在使用Django 1.1.1

任何见解将不胜感激。 在此先感谢。

1 个答案:

答案 0 :(得分:1)

使用初始数据实例化一个表单的惯用语是:

data = {
     'form-TOTAL_FORMS': u'2',
     'form-INITIAL_FORMS': u'0',
     'form-MAX_NUM_FORMS': u'',
     'form-0-updated_by': u'user',
     'form-1-updated_by': u'user',
}

formset = LineItemsInlineFormSet(data)

更新

正如Jonny Buchanan所指出的,这种方法为您提供了一个绑定的formset,如果未提供所有必需的数据,它将显示验证错误。如果它不是您想要的,请创建您的formset passing a custom Form with desired settings to django.forms.formsets.formset_factory()

通常将updated_by设置为当前登录用户automagically upon update。如果这是你想要的:

  1. 省略表单中的updated_by字段;
  2. save() commit=False如果是ModelFormset;
  3. updated_by设置为当前用户;和
  4. 保存对象实例,现在使用默认的commit=True
  5. 在管理网站中,有一种方便的方法可以使用内联:覆盖ModelAdmin.save_formset