繁体   English   中英

在Django的表单集中为字段设置默认值

[英]Setting a default value for a field in a formset in Django

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

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

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

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

我正在使用Django 1.1.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指出的那样,这种方法为您提供了一个绑定的表单集,如果未提供所有必需的数据,它将显示验证错误。 如果不是您想要的,请创建表单集,将具有所需设置的自定义Form传递给django.forms.formsets.formset_factory()

通常, 在update时会自动updated_by设置为当前登录用户。 如果这是您想要的:

  1. 省略表格中的updated_by字段;
  2. 如果是ModelFormset,则使用commit=False save() ;否则为false。
  3. 设置updated_by为当前用户;
  4. 保存对象实例,现在使用默认的commit=True

在管理站点中,可以使用内联方法方便地进行此操作:重写ModelAdmin.save_formset

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM