【问题标题】:Django: Adding inline formset rows without javascriptDjango:在没有 javascript 的情况下添加内联表单集行
【发布时间】:2011-01-27 18:49:15
【问题描述】:

这篇文章与此相关: Add row to inlines dynamically in django admin

有没有办法在不使用 javascript 的情况下添加内联表单集?显然,会涉及到页面刷新。

所以,如果表单有一个名为“添加”的按钮...

我想我可以这样做:

if request.method=='POST':
  if 'add' in request.POST:
    PrimaryFunctionFormSet = inlineformset_factory(Position,Function,extra=1)
    prims = PrimaryFunctionFormSet(request.POST)

我认为每次都会添加 1,然后使用发布数据填充表单。但是,extra=1 似乎并没有给 post 数据加 1。

【问题讨论】:

    标签: python django django-models django-forms django-views


    【解决方案1】:

    知道了。

    有时这是最简单的解决方案。只需复制 request.POST 数据并修改 TOTAL-FORMS。

    例如..

    if request.method=='POST':
      PrimaryFunctionFormSet = inlineformset_factory(Position,Function)
      if 'add' in request.POST:
        cp = request.POST.copy()
        cp['prim-TOTAL_FORMS'] = int(cp['prim-TOTAL_FORMS'])+ 1
        prims = PrimaryFunctionFormSet(cp,prefix='prim')
    

    然后正常吐出表格。保留您的数据,添加内联编辑器。

    【讨论】:

    • 非常感谢!但是如何防止帖子数据被验证?
    • 据我了解,验证作为 forms.Form/forms.ModelForm 系统的一部分自动发生...
    • 所以这对您的目的没有影响?我在想如果用户在一行中输入数据并请求另一行,他们不希望在提交之前进行任何验证。如果可以关闭它,我会检查 Django。
    • 啊。是的,我明白你现在在问什么。是的,验证仍然发生并引发“此字段是必需的”错误,但在此过程中仍会添加下一个内联表单集。我发现它工作得很好......而且它让用户知道他们需要填写哪些字段,一旦他们实际提交。
    • 您可以通过在 'initial' 参数中传递 POST 值来跳过验证。不过,这需要转换为字典列表。
    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多