【发布时间】:2020-03-30 16:25:40
【问题描述】:
我在下面有这段代码。我使用 formset 多次添加相同的表单。但是如果我把这两个表单集放在一起,就像在我看来,每个表单的第一个数据都会被保存。如果我在我的 def 中只放了 1 个表单集,它就可以工作,我放入表单的所有数据都会被保存。有人知道为什么会这样吗? (对不起我的英语)
Forms.py
class InsereIdioma(forms.ModelForm):
class Meta:
model = Idioma
fields = '__all__'
exclude = ['usuario']
InsereIdiomaFormset = formset_factory(InsereIdioma, extra=1)
class InsereTecnologia(forms.ModelForm):
class Meta:
model = Tecnologia
fields = '__all__'
exclude = ['usuario']
InsereTecnologiaFormset = formset_factory(InsereTecnologia, extra=1)
Views.py
def cadastro_curriculo(request):
if request.method == 'GET':
formset_idioma = InsereIdiomaFormset(request.GET or None)
formset_tecnologia = InsereTecnologiaFormset(request.GET or None)
elif request.method == 'POST':
formset_idioma = InsereIdiomaFormset(request.POST)
formset_tecnologia = InsereTecnologiaFormset(request.POST)
if formset_idioma.is_valid():
for form in formset_idioma:
idioma = form.cleaned_data.get('idioma')
fluencia = form.cleaned_data.get('fluencia')
if idioma and fluencia:
Idioma(
idioma=idioma,
fluencia=fluencia,
usuario=request.user
).save()
if formset_tecnologia.is_valid():
for form in formset_tecnologia:
sistema = form.cleaned_data.get('sistema')
nivel = form.cleaned_data.get('nivel')
if sistema and nivel:
Tecnologia(
sistema=sistema,
nivel=nivel,
usuario=request.user
).save()
return render(request, "personal/curriculo.html", {
'formset_idioma': formset_idioma,
'formset_tecnologia': formset_tecnologia,})
模板
<div class="card" style="margin-bottom: 25px;">
<div class="card-header" id="headingFour">
<h5 class="mb-0">Idiomas</h5>
</div>
{{ formset_idioma.management_form }}
<div class="content-inside" id="form_set_idioma">
{% for form in formset_idioma %}
{{form.non_field_errors}}
{{form.errors}}
<table class='no_error'>{{ form }}</table>
{% endfor %}
</div>
<input class="btn btn-primary fixedbutton" type="button" value="Adicionar" id="add_form_set_idioma">
<div id="empty_form_set_idioma" style="display:none">
<table class='no_error'>{{ formset_idioma.empty_form }}<br></table>
</div>
</div>
<div class="card" style="margin-bottom: 25px;">
<div class="card-header" id="headingFive">
<h5 class="mb-0">Tecnologia</h5>
</div>
{{ formset_tecnologia.management_form }}
<div class="content-inside" id="form_set_tecnologia">
{% for form in formset_tecnologia %}
{{form.non_field_errors}}
{{form.errors}}
<table class='no_error'>{{ form }}</table>
{% endfor %}
</div>
<input class="btn btn-primary fixedbutton" type="button" value="Adicionar" id="add_form_set_tecnologia">
<div id="empty_form_set_tecnologia" style="display:none">
<table class='no_error'>{{ formset_tecnologia.empty_form }}<br</table>
</div>
</div>
<script type='text/javascript'>
$('#add_form_set_idioma').click(function(){
var form_set_idioma_index = $('#id_form-TOTAL_FORMS').val(); $('#form_set_idioma').append($('#empty_form_set_idioma').html().replace(/__prefix__/g, form_set_idioma_index));
$('#id_form-TOTAL_FORMS').val(parseInt(form_set_idioma_index) + 1);});
$('#add_form_set_tecnologia').click(function(){
var form_set_tecnologia_index = $('#id_form-TOTAL_FORMS').val(); $('#form_set_tecnologia').append($('#empty_form_set_tecnologia').html().replace(/__prefix__/g, form_set_tecnologia_index));
$('#id_form-TOTAL_FORMS').val(parseInt(form_set_tecnologia_index) + 1);});
</script>
【问题讨论】:
-
查看 POST 参数 onSubmit。也许你只发送一份表格。
-
但是如果我只发送一个表格,这个表格的所有数据都会被保存,第二个表格会被忽略,对吧?这没有发生@Zartch
-
我不确定您的问题是什么。也许如果你向我们展示帖子参数,它会带来一些线索。
-
如果你想使用多个表单集,你应该使用prefix。
-
我已将您链接到文档。
标签: django forms view django-templates django-views