Я пытался реализовать встроенные формы, используя наборы форм 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 }}
, но проблема все еще сохраняется. Что я могу сделать?
Заранее спасибо за помощь.