【问题标题】:Setting a default value for a field in a formset in Django在 Django 中为表单集中的字段设置默认值
【发布时间】:2010-12-07 15:58:24
【问题描述】:

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

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

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

编译错误是:init() got an unexpected keyword argument 'initial'

我正在使用 Django 1.1.1

任何见解将不胜感激。 提前致谢。

【问题讨论】:

  • 你是如何定义LineItemsInlineFormSet的?如果您创建了自己的子类,您是否记得在其__init__ 中使用**kwargs

标签: python django


【解决方案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 所说,这种方法为您提供了一个绑定的表单集,如果未提供所有必需的数据,它将显示验证错误。如果不是您想要的,请创建您的表单集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

在管理站点中,有一种使用内联的便捷方法:覆盖ModelAdmin.save_formset

【讨论】:

  • 这种方法为您提供了一个绑定的表单集,如果未提供所有必需的数据,它将显示验证错误。
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多