Django formset引发了KeyError`form-0-id` [英] Django formset raises KeyError `form-0-id`

查看:254
本文介绍了Django formset引发了KeyError`form-0-id`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


$ b $

  list_ = super(MultiValueDict,self).__ getitem __(键)
KeyError:'form-0-id'

在处理上述异常期间,发生另一个异常:
...
django.utils.datastructures .MultiValueDictKeyError:''form-0-id'

modelformset.forms 引发同样的错误。





traceback:

  [03 / Sep / 2017 00:08:21]GET / collector / 183618 HTTP / 1.1200 20455 
[03 / Sep / 2017 00:08:21]GET /static/style.css HTTP / 1.1200 1123
[03 / Sep / 2017 00:08:21]GET / static / admin / js / vendor / jquery / jquery .js HTTP / 1.1200 258648
[03 / Sep / 2017 00:08:21]GET /static/lists_of_men_cropped/41550_1821100522_1170-01047.jpg HTTP / 1.1404 1769
[03 / Sep / 2017 00:08:21]GET /static/lists_of_men_cropped/41550_1821100522_1170-01047.jpg HTTP / 1.1404 1769
未找到:/favicon.ico
[03 / Sep / 2017 00:08 :21]GET /favicon.ico HTTP / 1.1404 2078
测试有效性
内部服务器错误:/ collector / 183618 / submit /
Traceback(最近一次调用最后一次):
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/utils/datastructures.py,第83行,在__getitem__
list_ = super(MultiValueDict,self ).__ getitem __(key)
KeyError:'form-0-id'

在处理上述异常期间,发生了另一个异常:

Traceback调用最后):
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/core/handlers/exception.py,第41行,内部
响应= get_response(请求)
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/core/handlers/base.py,第187行,在_get_response
response = self.process_exception_by_middleware(e,request)
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/core/handlers/base.py ,第185行,在_get_response
response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件/home/user/Documents/site/crowdsource/collector/views.py,行87,提交
if modelformset.is_valid():
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py ,第321行,在is_valid
self.errors
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py,行295,错误
self.full_clean()
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py,行344,在full_clean
form = self.forms [i]
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/utils/functional.py ,第35行,在__get__
res = instance .__ dict __ [self.name] = self.func(instance)
文件/home/user/Documents/site/venv/lib/python3.6 /site-packages/django/forms/formsets.py,第144行,格式为
,范围为i(self.total_form_count())]
文件/ home / user / Documents / site / venv / lib / python3.6 / site-packages / django / forms / formsets.py,第144行,在< listcomp>
为范围内的我(self.total_form_count())]
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/models.py ,第603行,在_construct_form
pk = self.data [pk_key]
文件/home/user/Documents/site/venv/lib/python3.6/site-packages/django/utils/ datastructures.py,第85行,在__getitem__
中引发MultiValueDictKeyError(repr(key))
django.utils.datastructures.MultiValueDictKeyError:''form-0-id'
[03 / Sep / 2017 00:09:02]POST / collector / 183618 / submit / HTTP / 1.1500 112006





     print('testing validity')
if modelformset.is_valid():
print('saving')
modelformset.save()

在Chrome中查看源代码(匿名字段名;它们都不是 id ) :

 < html> 

< link rel =stylesheettype =text / csshref =/ static / style.css/>
< script type =text / javascriptsrc =/ static / admin / js / vendor / jquery / jquery.js>< / script>
< body>

< div class =top>

< div class =div-img sub>
< img id =clipsrc =/ static / lists_of_men_cropped / 41550_1821100522_1170-01047.jpg/>
< / div>


< div class =div-table sub>
< form action =/ collector / 183618 / submit /method =POSTenctype =multipart / form-data>
< input type ='hidden'name ='csrfmiddlewaretoken'value ='GGVRrXaNH46axDImq2DEjEtV4mAaIiVLMpK6fpgyLXpLeVrIVOGICZ0SIMGtxeDV'/>
< input type =hiddenname =form-TOTAL_FORMSvalue =10id =id_form-TOTAL_FORMS/>< input type =hiddenname =form-INITIAL_FORMSvalue =10id =id_form-INITIAL_FORMS/>< input type =hiddenname =form-MIN_NUM_FORMSvalue =0id =id_form-MIN_NUM_FORMS/>< input type = hiddenname =form-MAX_NUM_FORMSvalue =1000id =id_form-MAX_NUM_FORMS/>

< table id =id_data_table>

< input type =hiddenname =idid =id_id/>

< thead>< tr>

< th>字段1< / th>

< th>字段2< / th>

< th>字段3< / th>

th字段4< / th>

字段5< / th>

< th>字段6< / th>

< th>字段7< / th>

字段8< / th>

th字段9< / th>

< / tr>< / thead>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< input type =hiddenname =idid =id_id/>

< tr>

< td>
< input type =textname =field_1id =id_field_1/>
< / td>

< td>
< input type =textname =field_2id =id_field_2/>
< / td>

< td>
< select name =field_3id =id_field_3>
< option value =selected> < /选项>

< option value =0>选项a< / option>

< option value =1> option b< / option>

< option value =2>选项c< / option>

< option value =3>选项d< / option>

< option value =4>选项e< / option>

< option value =5> option f< / option>

< option value =6>选项g< / option>

< option value =7>选项h< / option>

< option value =8> option i< / option>

< option value =9>选项j< / option>

< / select>
< / td>

< td>
< input type =textname =field_4id =id_field_4/>
< / td>

< td>
< input type =textname =field_5id =id_field_5/>
< / td>

< td>
< input type =textname =field_6id =id_field_6/>
< / td>

< td>
< input type =textname =field_7id =id_field_7/>
< / td>

< td>
< input type =checkboxname =field_8id =id_field_8/>
< / td>

< td>
< input type =checkboxname =field_9id =id_field_9/>
< / td>

< / tr>

< / table>
< p />
< div class =div-submit>
< input type =submit/>
< / div>
< / form>

< / div>

< / div>

< / body>

< script>
函数copyTextValue(bf){
var text = document.getElementsByClassName(call-number)[0] .value;
elements = document.getElementsByClassName(call-number);
for(var i = 0; i< elements.length; i ++){
elements [i] .value = text
}
}
<脚本>

< / html>


解决方案

我想你必须调用 is_valid ,即使您100%确定表单有效:

 如果modelformset.is_valid():
modelformset.save()


I'm trying to save a formset but I keep getting

list_ = super(MultiValueDict, self).__getitem__(key)
KeyError: 'form-0-id'

During handling of the above exception, another exception occurred:
...
django.utils.datastructures.MultiValueDictKeyError: "'form-0-id'"

modelformset.forms raises the same error.

Here's a question that seems very close, but adding {{form.id}} right before {%for field in form.visible_fields %} does not seem to help.

There is an autogenerated id field in the database table, but not specified explicitly in the model (not sure if that's relevant). id does not appear in any of the forms code or fields or model code. id is only a database column automatically generated by migrate.

Here's the view that I post to:

views.py

def list_page(request, list_id):

    image_path = get_image_path(list_id)

    ordered_men = OrderedTable.objects.filter(list_id=list_id)
    ordered_men = list(enumerate(
        sorted(ordered_men, key=str)
    ))
    print(f'there are {len(ordered_men)} men')
    OrderedManInputFormSet = modelformset_factory(
        OrderedManInput,
        fields=fields,
        form=OrderedManInputForm, extra=0)

    ordered_man_input_formset = OrderedManInputFormSet(
        form_kwargs={
            'choices': ordered_men,
        }
    )

    return render(
        request, 'collector/list.html',
        {
            'list_id': list_id,
            'image_path': image_path,
            'formset': ordered_man_input_formset,
        }
    )


def submit(request, list_id):

    OrderedManInputFormSet = modelformset_factory(
        OrderedManInput,
        form=OrderedManInputForm,
        fields=fields,
        extra=0,
    )
    modelformset = OrderedManInputFormSet(request.POST)

    print('testing validity')
    if modelformset.is_valid():
        print('saving')
        modelformset.save()

    return HttpResponseRedirect(
        reverse('collector:thanks')
    )


def thanks(request):
    return render(request, 'collector/thanks.html')

forms.py

class OrderedManInputForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):

        super(OrderedManInputForm, self).__init__(args, kwargs)
        if 'choices'in kwargs:
            # This works
            self.fields['full_name'] = forms.ChoiceField(
                choices=[('', '     ')] + kwargs['choices'],
                required=False
            )

    class Meta:
        model = OrderedManInput
        widgets = {}
        text_fields = [
            ...
        ]
        boolean_fields = [
            ...
        ]
        widgets.update({
            field: forms.TextInput()
            for field in text_fields
        })
        widgets.update({
            field: forms.CheckboxInput()
            for field in boolean_fields
        })
        fields = text_fields + boolean_fields
        labels = {
            ...
        }

Here's the template that does the posting:

    <form action="{% url 'collector:submit' list_id %}" method="POST" enctype="multipart/form-data">
      {% csrf_token %}
      {{ formset.management_form }}

      <table id="id_data_table">
        {% for form in formset %}
           {{form.id}}
        {% if forloop.first %}
          <thead><tr>
            {% for field in form.visible_fields %}
              <th>{{ field.label|capfirst }}</th>
            {% endfor %}
          </tr></thead>
        {% endif %}
        <tr>
          {%for field in form.visible_fields %}
            <td>
              {{field}}
            </td>
          {%endfor%}
        </tr>
      {% endfor %}
    </table>
    <p/>
    <div class="div-submit">
          <input type="submit"/>
    </div>
  </form>

so each row is a form and each column a field:

traceback:

[03/Sep/2017 00:08:21] "GET /collector/183618 HTTP/1.1" 200 20455
[03/Sep/2017 00:08:21] "GET /static/style.css HTTP/1.1" 200 1123
[03/Sep/2017 00:08:21] "GET /static/admin/js/vendor/jquery/jquery.js HTTP/1.1" 200 258648
[03/Sep/2017 00:08:21] "GET /static/lists_of_men_cropped/41550_1821100522_1170-01047.jpg HTTP/1.1" 404 1769
[03/Sep/2017 00:08:21] "GET /static/lists_of_men_cropped/41550_1821100522_1170-01047.jpg HTTP/1.1" 404 1769
Not Found: /favicon.ico
[03/Sep/2017 00:08:21] "GET /favicon.ico HTTP/1.1" 404 2078
testing validity
Internal Server Error: /collector/183618/submit/
Traceback (most recent call last):
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/utils/datastructures.py", line 83, in __getitem__
    list_ = super(MultiValueDict, self).__getitem__(key)
KeyError: 'form-0-id'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/user/Documents/site/crowdsource/collector/views.py", line 87, in submit
    if modelformset.is_valid():
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py", line 321, in is_valid
    self.errors
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py", line 295, in errors
    self.full_clean()
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py", line 344, in full_clean
    form = self.forms[i]
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py", line 144, in forms
    for i in range(self.total_form_count())]
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/formsets.py", line 144, in <listcomp>
    for i in range(self.total_form_count())]
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/forms/models.py", line 603, in _construct_form
    pk = self.data[pk_key]
  File "/home/user/Documents/site/venv/lib/python3.6/site-packages/django/utils/datastructures.py", line 85, in __getitem__
    raise MultiValueDictKeyError(repr(key))
django.utils.datastructures.MultiValueDictKeyError: "'form-0-id'"
[03/Sep/2017 00:09:02] "POST /collector/183618/submit/ HTTP/1.1" 500 112006

testing validity comes from this which I added in response to a proposed answer below.

print('testing validity')
if modelformset.is_valid():
    print('saving')
    modelformset.save()

View source in Chrome (anonymized field names; none of them are id):

<html>

<link rel="stylesheet" type="text/css" href="/static/style.css" />
<script type="text/javascript" src="/static/admin/js/vendor/jquery/jquery.js"></script>
<body>

<div class="top">

  <div class="div-img sub">
    <img id="clip"  src="/static/lists_of_men_cropped/41550_1821100522_1170-01047.jpg"/>
  </div>


  <div class="div-table sub">
    <form action="/collector/183618/submit/" method="POST" enctype="multipart/form-data">
      <input type='hidden' name='csrfmiddlewaretoken' value='GGVRrXaNH46axDImq2DEjEtV4mAaIiVLMpK6fpgyLXpLeVrIVOGICZ0SIMGtxeDV' />
      <input type="hidden" name="form-TOTAL_FORMS" value="10" id="id_form-TOTAL_FORMS" /><input type="hidden" name="form-INITIAL_FORMS" value="10" id="id_form-INITIAL_FORMS" /><input type="hidden" name="form-MIN_NUM_FORMS" value="0" id="id_form-MIN_NUM_FORMS" /><input type="hidden" name="form-MAX_NUM_FORMS" value="1000" id="id_form-MAX_NUM_FORMS" />

      <table id="id_data_table">

          <input type="hidden" name="id" id="id_id" />

          <thead><tr>

              <th>field 1</th>

              <th>field 2</th>

              <th>field 3</th>

              <th>field 4</th>

              <th>field 5</th>

              <th>field 6</th>

              <th>field 7</th>

              <th>field 8</th>

              <th>field 9</th>

          </tr></thead>

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

          <input type="hidden" name="id" id="id_id" />

        <tr>

            <td>
              <input type="text" name="field_1" id="id_field_1" />
            </td>

            <td>
              <input type="text" name="field_2" id="id_field_2" />
            </td>

            <td>
              <select name="field_3" id="id_field_3">
  <option value="" selected>     </option>

  <option value="0">option a</option>

  <option value="1">option b</option>

  <option value="2">option c</option>

  <option value="3">option d</option>

  <option value="4">option e</option>

  <option value="5">option f</option>

  <option value="6">option g</option>

  <option value="7">option h</option>

  <option value="8">option i</option>

  <option value="9">option j</option>

</select>
            </td>

            <td>
              <input type="text" name="field_4" id="id_field_4" />
            </td>

            <td>
              <input type="text" name="field_5" id="id_field_5" />
            </td>

            <td>
              <input type="text" name="field_6" id="id_field_6" />
            </td>

            <td>
              <input type="text" name="field_7" id="id_field_7" />
            </td>

            <td>
              <input type="checkbox" name="field_8" id="id_field_8" />
            </td>

            <td>
              <input type="checkbox" name="field_9" id="id_field_9" />
            </td>

        </tr>

    </table>
    <p/>
    <div class="div-submit">
          <input type="submit"/>
    </div>
  </form>

</div>

</div>

</body>

<script>
  function copyTextValue(bf) {
    var text = document.getElementsByClassName("call-number")[0].value ;
    elements = document.getElementsByClassName("call-number");
    for (var i = 0; i < elements.length; i++){
      elements[i].value = text
    }
  }
</script>

</html>

解决方案

I think you have to call is_valid before saving the formset, even if you are 100% sure the forms are valid:

if modelformset.is_valid():
    modelformset.save()

这篇关于Django formset引发了KeyError`form-0-id`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆