I had something similar to this being saved but when I changed it to a formset so I could save multiple forms it is no longer saving any forms.
edit: Sorry about the format not sure how to post html without it doing that
views.py:
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.contrib import messages
from django.forms import formset_factory
from .models import Container
from .forms import ContainerAdd
# Create your views here.
def index(request):
return render(request, 'containers/index.html',{
'containers': Container.objects.all()
})
def add(request):
ContainerFormSet = formset_factory(ContainerAdd, extra=1)
if request.method == 'POST':
formset = ContainerFormSet(request.POST)
if formset.is_valid():
for form in formset:
new_company_name = form.cleaned_data['company_name']
new_container_number = form.cleaned_data['container_number']
new_driver_in_name = form.cleaned_data['driver_in_name']
new_driver_in_date = form.cleaned_data['driver_in_date']
new_driver_out_name = form.cleaned_data['driver_out_name']
new_driver_out_date = form.cleaned_data['driver_out_date']
new_container_size = form.cleaned_data['container_size']
new_container_empty_full = form.cleaned_data['container_empty_full']
new_container_import_export = form.cleaned_data['container_import_export']
new_container = Container(
company_name = new_company_name,
container_number = new_container_number,
driver_in_name = new_driver_in_name,
driver_in_date = new_driver_in_date,
driver_out_name = new_driver_out_name,
driver_out_date = new_driver_out_date,
container_size = new_container_size,
container_empty_full = new_container_empty_full,
container_import_export = new_container_import_export
)
new_container.save()
return render(request, 'containers/add.html' , {
'formset': ContainerFormSet(),
'success': True
})
else:
formset = ContainerFormSet()
return render(request, 'containers/add.html',{
'formset': formset
})
else:
formset = ContainerFormSet()
return render(request, 'containers/add.html',{
'formset': formset
})
add.html
{% extends 'containers/base.html' %}
{% block body %}
<h3 class="m-4">All Containers</h3>
<div class="row">
<div class="col-12">
{% if success %}
<div class="alert alert-success" role="alert">
Container/s have been added successfully.
<a href="{% url 'index' %}" class="alert-link">Go to Home Page.</a>
</div>
{% else %}
<div class="card bg-light mb-3">
<div class="card-header">Add Containers</div>
<div class="card-body">
<p class="card-text">
<div class="table-responsive">
<form action="{% url 'add' %}" method="POST">
<table class="table table-hover">
{% csrf_token %}
<thead>
<tr>
<th scope="col">Company Name</th>
<th scope="col">Container Number</th>
<th scope="col">Driver In</th>
<th scope="col">Date In</th>
<th scope="col">Driver Out</th>
<th scope="col">Date Out</th>
<th scope="col">Container Size</th>
<th scope="col">Empty/full</th>
<th scope="col">Import/Export</th>
</tr>
</thead>
<tbody id="container-table-body">
{% for form in formset.forms %}
<tr>
<td>
<div class="fieldWrapper">
{{ form.company_name}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.container_number}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.driver_in_name}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.driver_in_date}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.driver_out_name}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.driver_out_date}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.container_size}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.container_empty_full}}
</div>
</td>
<td>
<div class="fieldWrapper">
{{ form.container_import_export}}
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<button type="button" class="btn btn-secondary" onclick="addRows()">Add Another Container</button>
<button type="submit" class="btn btn-primary">Add</button>
</form>
</div>
</p>
</div>
</div>
{% endif %}
</div>
</div>
<script>
function addRows() {
var tableBody = document.getElementById("container-table-body");
var row = tableBody.getElementsByTagName("tr")[0].cloneNode(true);
tableBody.appendChild(row);
}
</script>
{% endblock %}