首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用django-dynamic-formset创建formset工厂时出错

使用django-dynamic-formset创建formset工厂时出错
EN

Stack Overflow用户
提问于 2018-05-09 19:05:19
回答 1查看 76关注 0票数 0

我试图在相同的视图中使用两个formset_factory和django动态表单集,但是我得到了这个错误DOMFind2元素具有非唯一的id # id _ form -TOTAL_FORMS:当我试图在第二个表单上添加前缀时,它只生成一个id,如果添加了多个项,它将保存最后一个项。我想知道如何解决这个问题,以及为什么会发生这种情况?提前谢谢。

我的forms.py

代码语言:javascript
复制
class ResearchLineForm(forms.ModelForm):
    class Meta:
        model = ResearchLines
        fields = ('title', )

        widgets = {
            'title':forms.TextInput(attrs={
            'class':'form-control',
            'placeholder':'Linhas de Pesquisa'
        })
    }
LinesFormSet = formset_factory(ResearchLineForm)


class TokenForm(forms.Form):
    name =  forms.CharField( max_length=255, widget=forms.TextInput(
        attrs={
            'class':'form-control',
            'placeholder':'Linhas de Pesquisa'
        })
)
email = forms.CharField(max_length=255, widget=forms.TextInput(
    attrs={
            'class':'form-control',
            'placeholder':'Linhas de Pesquisa'
        })
 )


TokenFormSet = formset_factory(TokenForm)

我的view.py

代码语言:javascript
复制
def ubc_register(request):
    if request.method == "POST":
        ubc = Ubc()
        form = UbcForm(request.POST)
        tokenformset = TokenFormSet(request.POST, request.FILES)
        formset = LinesFormSet(request.POST, request.FILES)
        if form.is_valid():
            ubc.name = form.cleaned_data['name']
            ubc.laboratory_departament = form.cleaned_data['laboratory_departament']
            ubc.partner_category = form.cleaned_data['partner_category']
            ubc.parent_institution_name =  form.cleaned_data['parent_institution_name']
            ubc.coordinator = form.cleaned_data['coordinator']
            if "phone" in form.cleaned_data:
                ubc.phone = form.cleaned_data['phone']
            if "email" in form.cleaned_data:
                ubc.email = form.cleaned_data['email']
            if "cnpj" in form.cleaned_data:
                ubc.cnpj = form.cleaned_data['cnpj']
            if "rad_operating_time" in form.cleaned_data:
                ubc.rad_operating_time = form.cleaned_data['rad_operating_time']
            if "rh_count" in form.cleaned_data:
                ubc.rh_count = form.cleaned_data['rh_count']
            if "website" in form.cleaned_data:
                ubc.website = form.cleaned_data['website']

            ubc.cep = form.cleaned_data['cep']
            ubc.street = form.cleaned_data['street']
            ubc.city = form.cleaned_data['city']
            ubc.neighborhood = form.cleaned_data['neighborhood']
            ubc.number = form.cleaned_data['number']
            ubc.uf = form.cleaned_data['uf']
            ubc.filter_grade = 0
            ubc.grade = 0

            if 'activity_branch' in form.cleaned_data:
                ubc.activity_branch = form.cleaned_data['activity_branch']                 

            ubc.save()

        # research_lines
            if formset.is_valid():
                for researchline in formset.cleaned_data:
                    if bool(researchline):
                        created_researchline = ResearchLines.objects.create(title=researchline['title'])
                        ubc.research_line.add(created_researchline)


            product_ids = [ cert.id for cert in form.cleaned_data["main_product"] ] 
            for main_product in MainProductUbc.objects.filter(id__in=product_ids):
            ubc.main_product.add(main_product)
   )
        return HttpResponseRedirect(reverse('index'))
    else:
        form = UbcForm()
        formset = LinesFormSet()
        tokenformset = TokenFormSet()
    context = {
        'form':form,
        'formset':formset,
        'tokenformset': tokenformset,            
    }
    return render(request, 'accounts/ubc_form.html', context)

我的formset.js文件

代码语言:javascript
复制
$('.link-formset').formset({
   deleteText: 'Remover'
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 20:50:00

formsets使用#id_form-TOTAL_FORMS (和其他一些东西)来查看有多少个表单存在,以及最初有多少个表单。

如果您希望在单个页面上显示多个窗体集,则会遇到这样的问题,即最终得到两个具有相同id的这些对象。要解决这个问题,您可以为一个(或两个)表单集定义一个前缀

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50260414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档