内联django modelformset存在问题?
我正在学习实现django inlineformset,我面临以下错误。在客户端,我使用的是内联django modelformset存在问题?,django,python-3.x,Django,Python 3.x,我正在学习实现django inlineformset,我面临以下错误。在客户端,我使用的是django动态表单集jquery插件。但是当我渲染表单集时,我看到“添加另一个或删除”选项多次出现。这就是我到目前为止所尝试的。当我在代替表单中切换到表单集时,发生了此错误 forms.py: 类BaseSkillFormSet(BaseModelFormSet): 定义初始化(self,*args,**kwargs): super(BaseSkillFormSet,self)。\uuuuuu初始值(*
django动态表单集
jquery插件。但是当我渲染表单集时,我看到“添加另一个或删除”选项多次出现。这就是我到目前为止所尝试的。当我在代替表单中切换到表单集时,发生了此错误
forms.py
:
类BaseSkillFormSet(BaseModelFormSet):
定义初始化(self,*args,**kwargs):
super(BaseSkillFormSet,self)。\uuuuuu初始值(*args,**kwargs)
self.queryset=Skill.objects.exclude(Skill\u name\u isnull=True)
类BaseWorkExperienceFormSet(BaseModelFormSet):
定义初始化(self,*args,**kwargs):
super(BaseWorkExperienceFormSet,self)。\uuuu初始值(*args,**kwargs)
self.queryset=WorkExperience.objects.exclude(
公司名称(空=真)
类BaseEducationFormSet(BaseModelFormSet):
定义初始化(self,*args,**kwargs):
超级(BaseEducationFormSet,self)。\uuuuuu初始值(*args,**kwargs)
self.queryset=Education.objects.exclude(name\uu isnull=True)
课堂技能表(forms.ModelForm):
类元:
模型=技能
字段=(‘技能名称’、‘熟练程度’、)
课堂工作体验表单(forms.ModelForm):
类元:
模型=工作经验
排除=('user',)
小部件={
“开始日期”:DateInput()
}
班级教育形式(forms.ModelForm):
类元:
模型=教育
排除=('user',)
小部件={
“开始日期”:DateInput()
}
类集合创建(更新视图):
model=UserProfile
模板名称='accounts/user\u profile\u form.html'
form\u class=UserProfileForm
success\u url=None
def获取上下文数据(自身,**kwargs):
data=super(CollectionCreate,self)。获取上下文数据(**kwargs)
如果self.request.POST:
data['formset']=SkillFormSet(self.request.POST)
数据['formset1']=WorkExperienceFormSet(self.request.POST)
数据['formset3']=EducationFormSet(self.request.POST)
返回数据
其他:
打印('object',self.object)
数据['formset']=SkillFormSet()
数据['formset1']=WorkExperienceFormSet()
数据['formset3']=EducationFormSet(实例=self.object)
返回数据
SkillFormSet=inlineformset\u工厂(
UserProfile,Skill,formset=BaseSkillFormSet,
字段=['skill\u name','level\u of \u experience'],can\u delete=True,extra=1
)
WorkExperienceFormSet=inlineformset\u工厂(
UserProfile,WorkExperience,formset=BaseWorkExperienceFormSet,
字段=[“公司名称”、“开始日期”、“结束日期”、“工作描述”],
can_delete=True,extra=1,
)
EducationFormSet=inlineformset\u工厂(
UserProfile,Education,formset=BaseEducationFormSet,
字段=[“名称”、“开始日期”、“结束日期”、“教育类型”],
can_delete=True,extra=1,max_num=5,
)
formset.html
{% load static %}
{% load crispy_forms_tags %}
<table>
{{ formset.management_form|crispy }}
{% for form in formset.forms %}
<tr class="{% cycle 'row1' 'row2' %} formset_row-{{ formset.prefix }}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field|as_crispy_field }}
</td>
{% endfor %}
</tr>
{% endfor %}
{% for form in formset1.forms %}
<tr class="{% cycle 'row1' 'row2' %} formset_row-{{ formset.prefix }}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field|as_crispy_field }}
</td>
{% endfor %}
</tr>
{% endfor %}
{% for form in formset2.forms %}
<tr class="{% cycle 'row1' 'row2' %} formset_row-{{ formset.prefix }}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field|as_crispy_field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<br>
<script src="{% static 'js/vendor/jquery/jquery.min.js' %}"></script>
<script src="{% static 'js/formset.js' %}"></script>
<script type="text/javascript">
$('.formset_row-{{ formset.prefix }}').formset({
addText: 'add another',
deleteText: 'remove',
prefix: '{{ formset.prefix }}',
});
</script>
{%load static%}
{%load crispy_forms_tags%}
{{formset.management{u form|crispy}}
{formset.forms%%中表单的%
{%form.visible_fields%}
{#在#表单中包含隐藏字段}
{%if-forloop.first%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{%endif%}
{{field.errors.as_ul}}
{{field | as_crispy_field}
{%endfor%}
{%endfor%}
{formset1.forms%}
{%form.visible_fields%}
{#在#表单中包含隐藏字段}
{%if-forloop.first%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{%endif%}
{{field.errors.as_ul}}
{{field | as_crispy_field}
{%endfor%}
{%endfor%}
{formset2.forms%}
{%form.visible_fields%}
{#在#表单中包含隐藏字段}
{%if-forloop.first%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{%endif%}
{{field.errors.as_ul}}
{{field | as_crispy_field}
{%endfor%}
{%endfor%}
$('.formset_行-{{formset.prefix}}').formset({
addText:“添加另一个”,
deleteText:“删除”,
前缀:“{formset.prefix}}”,
});
您需要分别实例化每个表单集 为每个表单集使用一个单独的表,添加一个唯一的ID并使用它来实例化表单集,如下所示:
{% load static %}
{% load crispy_forms_tags %}
{{ formset.management_form|crispy }}
<table id="formset">
{% for form in formset.forms %}
<tr class="{% cycle 'row1' 'row2' %} formset_row-{{ formset.prefix }}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field|as_crispy_field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<table id="formset1">
{% for form in formset1.forms %}
<tr class="{% cycle 'row1' 'row2' %} formset_row-{{ formset1.prefix }}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field|as_crispy_field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<table id="formset2">
{% for form in formset2.forms %}
<tr class="{% cycle 'row1' 'row2' %} formset_row-{{ formset2.prefix }}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field|as_crispy_field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<br>
<script src="{% static 'js/vendor/jquery/jquery.min.js' %}"></script>
<script src="{% static 'js/formset.js' %}"></script>
<script type="text/javascript">
$('#formset .formset_row-{{ formset.prefix }}').formset({
addText: 'add another',
deleteText: 'remove',
prefix: '{{ formset.prefix }}',
});
$('#formset1 .formset_row-{{ formset1.prefix }}').formset({
addText: 'add another',
deleteText: 'remove',
prefix: '{{ formset.prefix }}',
});
$('#formset2 .formset_row-{{ formset2.prefix }}').formset({
addText: 'add another',
deleteText: 'remove',
prefix: '{{ formset.prefix }}',
});
</script>
{%load static%}
{%load crispy_forms_tags%}
{{formset.management{u form|crispy}}
{formset.forms%%中表单的%
{%form.visible_fields%}
{#在#表单中包含隐藏字段}
{%if-forloop.first%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{%endif%}
{{field.errors.as_ul}}
{{field}as|cri