Django Formset: ['Данные ManagementForm отсутствуют или были подделаны'] - PullRequest
0 голосов
/ 13 апреля 2020

Я пытался реализовать встроенные формы, используя наборы форм Django.
Чтобы объяснить, что я пытался сделать, я пытался принять несколько заказов для конкретного клиента.
Я делюсь кодом для того же.

views.py

def create_customer_order(request, pk):
    OrderFormSet = inlineformset_factory(Customer, Order, fields=('product', 'status'))
    customer = Customer.objects.get(id=pk)
    if request.method == 'GET':
        formset = OrderFormSet(instance=customer)
        context={'customer': customer, 'formset': formset}
        return render(request, 'customer_order_form.html', context=context)
    elif request.method == 'POST':
        formset = OrderFormSet(request.POST, instance=customer)
        if formset.is_valid():
            formset.save()
            return redirect('/')

и мой customer_order_form. html is,

{% extends 'main.html' %}
{% load static %}

{% block content %}
<h3>Orders for {{ customer.name }}</h3>
<br>
<form method="POST" action=".">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
        {{ form }}
        <hr>
    {% endfor %}
    <input type="submit" name="Submit">
</form>
{% endblock %}

Но когда я делаю запрос POST, то есть, чтобы сохранить несколько форм (в форме), я получаю следующую ошибку.

Traceback (most recent call last):
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Bagga\Documents\Django\Projects\crm\accounts\views.py", line 65, in create_customer_order
    if formset.is_valid():
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\forms\formsets.py", line 308, in is_valid
    self.errors
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\forms\formsets.py", line 288, in errors
    self.full_clean()
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\forms\formsets.py", line 329, in full_clean
    for i in range(0, self.total_form_count()):
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\forms\formsets.py", line 112, in total_form_count
    return min(self.management_form.cleaned_data[TOTAL_FORM_COUNT], self.absolute_max)
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Users\Bagga\Documents\Django\Projects\crm\venv\lib\site-packages\django\forms\formsets.py", line 94, in management_form
    code='missing_management_form',

Exception Type: ValidationError at /create_customer_order/1/
Exception Value: ['ManagementForm data is missing or has been tampered with']    

Я также включил {{ formset.management_form }}, но проблема все еще сохраняется. Что я могу сделать?
Заранее спасибо за помощь.

...