在Django的formset中,我们如何为需要http会话值的字段设置默认值?由于需要会话来获取值,因此我们无法在模型类本身中设置默认值。在保存在视图函数中之前,我无法理解如何在formset中显式设置每个表单中的值。
在FormSet的构造中设置初始属性会起作用,但无论出于何种原因,我都会遇到编译错误。代码是这样的:
formset = LineItemsInlineFormSet(initial=[{'updated_by':'user'}])
编译错误是: init ()得到意外的关键字参数'initial'
我正在使用Django 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。如果这是你想要的:
updated_by
字段; save()
commit=False
如果是ModelFormset; updated_by
设置为当前用户;和commit=True
。在管理网站中,有一种方便的方法可以使用内联:覆盖ModelAdmin.save_formset。