Django中Crispy Forms自定义布局下主表单与Inline表单提交异常
问题描述
我有一个采用Crispy Forms自定义布局的主表单,以及一段手动编写HTML的Inline表单集。不使用自定义布局时,两者可正常保存;但使用布局后,点击提交按钮无响应。此前尝试将提交按钮加入布局,却出现Inline表单数据无法传递、返回空列表的问题。
HTML代码
<form id="registro-form" class="main-form" action="?" method="POST"> <!-- Main Form --> {% csrf_token %} {% crispy form %} <hr> <!-- Inline Formset --> {{ itens_formset.management_form }} {% for formset_form in itens_formset %} <div class="inline-formset-item"> <!-- Render inline formset fields manually --> <div class="row no-gutters"> <!-- Render formset fields here --> </div> </div> {% endfor %} <!-- Submit Button --> <button class="btn btn-success mt-2 mb-5" type="submit" style="width: 110px;">Salvar</button> </form>
views.py代码
class RegistrarCreate(GroupRequiredMixin, CreateView): # GroupRequiredMixin and other attributes def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) ItemFormSet = inlineformset_factory(Registro, Item, form=ItemForm, extra=1, can_delete=False) if self.request.POST: context['itens_formset'] = ItemFormSet(self.request.POST, instance=self.object) else: context['itens_formset'] = ItemFormSet(instance=self.object) return context def form_valid(self, form): context = self.get_context_data() itens_formset = context['itens_formset'] if itens_formset.is_valid(): self.object = form.save() itens_formset.instance = self.object itens_formset.save() return super().form_valid(form) else: print("Formset is invalid") print(itens_formset.errors) return self.render_to_response(self.get_context_data(form=form)) def get(self, request, *args, **kwargs): self.object = None return super().get(request, *args, **kwargs)
forms.py代码
class RegistroForm(forms.ModelForm): class Meta: model = Registro fields = ['tipo', 'vendedor', 'nome', 'cpf', 'email', 'rg', 'cidade', 'telefone', 'numero', 'rua', 'bairro', 'data'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 用Crispy Forms自定义字段布局 self.helper = FormHelper() self.helper.form_class = 'form' self.helper.layout = Layout( Div( Div(Field('tipo', css_class='form-control'), css_class='col-md-5'), Div(css_class='col-md-2'), Div(HTML("<h4>N° {{ registro_format }}</h4>")), css_class='col-md-5 mt-4'), css_class='row' ), Div( Div(Field('nome', css_class='form-control'), css_class='col-md-5'), Div(css_class='col-md-2'), Div(Field('cpf', css_class='form-control'), css_class='col-md-5'), css_class='row' ), Div( Div(Field('email', css_class='form-control'), css_class='col-md-5'), Div(css_class='col-md-2'), Div(Field('rg', css_class='form-control'), css_class='col-md-5'), css_class='row' ), Div( Div(Field('vendedor', css_class='form-control'), css_class='col-md-5'), Div(css_class='col-md-2'), Div(Field('data', css_class='form-control'), css_class='col-md-5'), css_class='row' ), Div( Div(Field('cidade', css_class='form-control'), css_class='col-md-5'), Div(css_class='col-md-2'), Div(Field('telefone', css_class='form-control'), css_class='col-md-5'), css_class='row' ), Div( Div(Field('numero', css_class='form-control'), css_class='col-md-5'), Div(css_class='col-md-2'), Div(Field('rua', css_class='form-control'), css_class='col-md-5'), css_class='row' ), Div( Div(Field('bairro', css_class='form-control'), css_class='col-md-5'), css_class='row' ), ) class ItemForm(forms.ModelForm): class Meta: model = Item fields = ['quantidade', 'tamanho','valorProd', 'valor_total']
内容的提问来源于stack exchange,提问作者Matheus Marques
相关产品推荐
相关产品推荐

