python - 更新内联表单集时出现 MultiValueDictKeyError

标签 python django inline-formset

我在更新内联表单集时遇到 Django 问题。我想更新表单和内联表单集,但它引发了此错误:

"MultiValueDictKeyError"

Exception Value: "u'clientphone_set-0-id'"

这是我的观点:

def edit_client(request, client_id):

    client_to_edit = Client.objects.get(id=client_id)
    form = ClientForm(instance=client_to_edit)
    phone_formset = ClientPhoneFormSet(instance=client_to_edit)

    if request.method == 'POST':
        form = ClientForm(request.POST, instance=client_to_edit)

        if form.is_valid():
            form_saved = form.save(commit=False)
            phone_formset = ClientPhoneFormSet(request.POST, request.FILES, instance=form_saved)

            if phone_formset.is_valid():
                form_saved.save()
                phone_formset.save()        
                return client(request)

    return render(request, 'WorkOrders/add_client.html', {'form' : form, 'phone_formset' : phone_formset})

这些是我的表格

class ClientForm(forms.ModelForm):
    name = forms.CharField(max_length=128)
    rif = forms.CharField(max_length=10)
    address = forms.CharField(max_length=250)

    class Meta:
        model = Client
        fields = ('name','rif','address',)

ClientPhoneFormSet = inlineformset_factory(Client, ClientPhone, extra=1, fields=('phone_number',), can_delete=True)

这是我的模板

<form class="form-horizontal" id="add_client" method="post" action=".">
    {% csrf_token %}
    {% for field in form.visible_fields %}
        <div class="form-group">
           <label for="{{ field.id }}" class="col-sm-2 control-label">{{ field.help_text }}</label>
           <div class="col-sm-10">
             {{ field.errors }}
             {{ field }}
           </div>
        </div>
    {% endfor %}
    <div class="form-group">
        <label for="{{ field.id }}" class="col-sm-2 control-label">Teléfono</label>
        <div class="col-sm-10">
            <table border="0" cellpadding="0" cellspacing="0" width="100%">
                <tbody>
                    {% for form in phone_formset.forms %}
                        <tr>
                            <td>
                                {% if form.instance.pk %}
                                    {{ form.DELETE }}
                                {% endif %}
                                {{ form.errors }}
                                {{ form.phone_number }}
                            </td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
{{ phone_formset.management_form }}
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-primary">Guardar</button>
            <a href="{% url 'index' %}" class="btn btn-primary">Volver</a>
        </div>
    </div>
</div>
</form> 

它打开表单没有问题,但在我提交时发生错误。

谢谢。

最佳答案

我使用 phone_formset 而不是 phone_formset.forms 修复了该问题,并添加了 {{phone_field.id }}

结果如下:

<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        {% for phone_field in phone_formset %}
        <tr>
           <td>
              {% if phone_field.instance.pk %}
                {{ phone_field.DELETE }}
              {% endif %}
              {{ phone_field.errors }}
              {{ phone_field.id }}
              {{ phone_field.phone_number }}
           </td>
        </tr>
        {% endfor %}
    </tbody>
</table>

关于python - 更新内联表单集时出现 MultiValueDictKeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446162/

相关文章:

python - 解构类型提示

python - Django - 复杂查询

DJANGO:如何以形式而不是文字 "model object"呈现模型对象名称?

Django inlineformset - 自定义保存方法

python - 使用 python 和 mongodb 进行异步日志记录

python - pandas系列功能构成

python - 在 python 列表理解中添加额外的语句

python - 如何在使用 djanago-allauth 发出 post_save 信号后发送电子邮件确认邮件

python - 从 django 中的 self 模型中调用模型

django - 同时调用内联 FormSet 的多个实例