gpt4 book ai didi

django 脆皮形式 : Nesting a formset within a form

转载 作者:行者123 更新时间:2023-12-03 23:20:03 24 4
gpt4 key购买 nike

我有一个 Django Formset我想在另一种形式的中间进行布局。我正在使用 django-crispy-forms在父表单的 __init__ 中设置布局:

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Field, Div
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.layout = Layout(
Div(
Div(Field('foo'), css_class='span3'),
Div(Field('bar'), css_class='span4'),
css_class='row'
),
Field('baz', css_class='span1'),
...
)
self.helper.add_input(Submit('submit', 'Submit', css_class='btn btn-primary offset4'))

我的模板只是使用 {% crispy %} 呈现表单标签。

我想知道我应该如何合并表单集。我应该在上面的 init 函数中实例化它吗?我如何在那里引用它?

other examples在线表单和表单集组合,它们一个接一个地连续渲染,但我想知道我是否可以更好地控制它们如何与脆皮的布局结合在一起。

最佳答案

我在不修改 Crispy Forms 的情况下解决了这个问题,方法是创建一个呈现表单集的新字段类型:

from crispy_forms.layout import LayoutObject, TEMPLATE_PACK

class Formset(LayoutObject):
"""
Layout object. It renders an entire formset, as though it were a Field.

Example::

Formset("attached_files_formset")
"""

template = "%s/formset.html" % TEMPLATE_PACK

def __init__(self, formset_name_in_context, template=None):
self.formset_name_in_context = formset_name_in_context

# crispy_forms/layout.py:302 requires us to have a fields property
self.fields = []

# Overrides class variable with an instance level variable
if template:
self.template = template

def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
formset = context[self.formset_name_in_context]
return render_to_string(self.template, Context({'wrapper': self,
'formset': formset}))

它需要一个模板来呈现表单集,这使您可以准确地控制它的呈现方式:
{% load crispy_forms_tags %}

<div class="formset">
{% crispy formset %}
<input type="button" name="add" value="Add another" />
</div>

您可以使用它在您的布局中嵌入表单集,就像任何其他 Crispy 布局元素一样:
self.helper.layout = Layout(
MultiField(
"Education",
Formset('education'),
),

关于django 脆皮形式 : Nesting a formset within a form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15157262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com