【问题标题】:Why are my crispy formset layouts being ignored?为什么我的脆表单集布局被忽略了?
【发布时间】:2014-09-04 02:41:51
【问题描述】:

我正在为一个相当复杂的模型开发一个前端表单,但我对脆性表单还是很陌生。

我的提案模型使用两个 m2m 字段来表示部分和要求,每个字段都有自定义的表格。我正在使用带有此模板的表单集提交提案表单:

    <div class="tab-content panel-body">
        <div id="basic-information"
             class="tab-pane active" >
            {% crispy form %}
        </div>
        <div id="sections"
             class="tab-pane" >
            {% crispy sectionmap_formset sectionmap_formset_helper %}
        </div>
        <div id="requirements"
             class="tab-pane" >
            {% crispy requirementmap_formset requirementmap_formset_helper %}
        </div>
    </div>

助手是这样设置的:

class MapFormSetHelper(FormHelper):
    template = 'bootstrap/table_inline_formset.html'

    def __init__(self, form=None):
        super(MapFormSetHelper, self).__init__(form)
        self.disable_csrf = True
        self.form_method = 'post'
        self.form_tag = False


class SectionMapFormSetHelper(MapFormSetHelper):
    def __init__(self, form=None):
        super(SectionMapFormSetHelper, self).__init__(form)
        self.layout = Layout('order', 'section', 'placement')


class RequirementMapFormSetHelper(MapFormSetHelper):
    def __init__(self, form=None):
        super(RequirementMapFormSetHelper, self).__init__(form)
        self.layout = Layout('order', 'requirement', 'selected_option')

并因此添加到上下文中:

def get_context_data(self, **kwargs):
    context = super(ProposalUpdateView, self).get_context_data(**kwargs)
    proposal = context['proposal']

    # Add formsets
    for model_class, context_key, formset_class in (
            (pm.ProposalSectionMap, 'sectionmap_formset', forms.SectionMapFormSet),
            (pm.ProposalRequirementMap, 'requirementmap_formset', forms.RequirementMapFormSet)):
        qs = model_class.objects.filter(proposal=proposal)
        context[context_key] = formset_class(queryset=qs)

    # Add helpers
    context['sectionmap_formset_helper'] = forms.SectionMapFormSetHelper()
    context['requirementmap_formset_helper'] = forms.RequirementMapFormSetHelper()

    return context

表格布局和 form_tag 位被很好地拾取(结果看起来不错),但 self.layout 设置没有效果。

问题是所有的表单集字段仍在显示 - 尽管调用了行并且正确的助手到位,就好像布局被忽略了(我尝试将 html 添加到布局并且不显示)。

谁能告诉我我做错了什么?请随时向我指出正确的文档 - 我已经仔细研究过它但无济于事,我可能遗漏了一些明显的东西。

【问题讨论】:

    标签: django django-crispy-forms


    【解决方案1】:

    好的,答案在于我使用了 bootstrap/table_inline_formset.html。仔细查看它,我发现它直接通过表单字段工作,因此忽略了清晰的布局。在这方面 -1 表示脆。

    为了指定我的字段,我为表单集创建了一个自定义模型表单,并将字段添加到它的 Meta 中:

    class SectionMapForm(forms.ModelForm):
        class Meta:
            model = pm.ProposalSectionMap
            fields = ('order', 'section', 'placement')
    
    SectionMapFormSet = modelformset_factory(pm.ProposalSectionMap, form=SectionMapForm, extra=1)
    
    
    class RequirementMapForm(forms.ModelForm):
        class Meta:
            model = pm.ProposalRequirementMap
            fields = ('order', 'requirement', 'selected_option')
    
    RequirementMapFormSet = modelformset_factory(pm.ProposalRequirementMap, form=RequirementMapForm, extra=1)
    

    我希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2013-09-30
      • 2016-06-20
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 2022-12-23
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多