I think the problem lies with obtaining the 'POST' data. Any help is much appreciated.
Step 1
Step 2
Step 3 - Output Expectation
John Doe Location A 1 ("1" is checked)
James Smith Location A 0 ("0" is not checked)
forms.py
from django import forms
from django.forms.formsets import BaseFormSet
class UserInfo (forms.Form):
first_name = forms.CharField (max_length = 20, required = False)
last_name = forms.CharField (max_length = 20, required = False)
overwrite = forms.BooleanField (required = False)
class BaseUserInfoFormSet (BaseFormSet):
def clean (self):
if any (self.errors):
return
firstnames = []
lastnames = []
errors = []
for form in self.forms:
firstname = form.cleaned_data.get ('first_name')
lastname = form.cleaned_data.get ('last_name')
if ((firstname in firstnames) or (lastname in lastnames)) and len (errors) < 2:
errors.append ('First and/or last name must be unique')
if ((firstname == '') or (lastname == '')) and len (errors) < 2:
errors.append ('First and/or last name cannot be blanked')
firstnames.append (firstname)
lastnames.append (lastname)
if errors:
raise forms.ValidationError (errors)
return self.cleaned_data
#class DuplicateForm (forms.Form):
# overwrite = forms.BooleanField (required = False)
from django.shortcuts import render, render_to_response
from django.forms.formsets import formset_factory
from userinfo.forms import UserInfo
from userinfo.forms import BaseUserInfoFormSet
from userinfo.addName import webform
# Create your views here.
def addname (request):
UserInfoSet = formset_factory (UserInfo, formset = BaseUserInfoFormSet, extra = 2, max_num = 3)
if request.method == 'POST':
formset = UserInfoSet (request.POST)
if formset.is_valid ():
location = request.POST ['site']
names = formset.cleaned_data
request.session ['location'] = location
request.session ['names'] = names
for name in names:
firstname = name.get ('first_name')
lastname = name.get ('last_name')
if firstname and lastname:
webform (firstname, lastname, location)
context = {'names': names, 'location': location}
return render (request, 'userinfo/response.html', context)
else:
formset = UserInfoSet ()
context = {
'formset': formset,
'first_name_0': request.POST.get ('form-0-first_name', ''),
'last_name_0': request.POST.get ('form-0-last_name', ''),
'first_name_1': request.POST.get ('form-1-first_name', ''),
'last_name_1': request.POST.get ('form-1-last_name', ''),
}
return render (request, 'userinfo/addname.html', context)
def response (request):
location = request.session ['location']
names = request.session ['names']
UserInfoSet = formset_factory (UserInfo, formset = BaseUserInfoFormSet, extra = 2, max_num = 3)
if request.method == 'POST':
formset = UserInfoSet (request.POST)
if formset.is_valid ():
data = formset.cleaned_data
for duplicate in data:
overwrite = duplicate.get ('overwrite')
#if request.method == 'POST':
# form = DuplicateForm (request.POST)
# if form.is_valid ():
# data = form.cleaned_data
#for duplicate in data:
# overwrite = duplicate.get ('overwrite')
context = {'names': names, 'location': location, 'data': data}
return render (request, 'userinfo/results.html', context)
return render_to_response ('No valid data.')
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Add Name</title>
</head>
<body>
<h1>Add Name</h1>
<form action="" method="POST">{% csrf_token %}
<h3>Select a site</h3>
<div class="radioSection">
<p><input type="radio" id="radio1" name="site" value="Location A" checked>
<label for="radio1">Location A</label>
<input type="radio" id="radio2" name="site"value="Location B">
<label for="radio2">Location B</label></p>
</div>
{{ wizard.management_form }}
{{ formset.management_form }}
<label for="id_form-0-first_name">First Name:</label>
<input id="id_form-0-first_name" maxlength="20" name="form-0-first_name" type="text"
value="{{ first_name_0 }}" required />
<label for="id_form-0-last_name">Last Name:</label>
<input id="id_form-0-last_name" maxlength="20" name="form-0-last_name" type="text"
value="{{ last_name_0 }}" required />
<p><label for="id_form-1-first_name">First Name:</label>
<input id="id_form-1-first_name" maxlength="20" name="form-1-first_name" type="text"
value="{{ first_name_1 }}" />
<label for="id_form-1-last_name">Last Name:</label>
<input id="id_form-1-last_name" maxlength="20" name="form-1-last_name" type="text"
value="{{ last_name_1 }}" /></p>
<p><input type="submit" value="Add Name" /></p>
</form>
{% if formset.errors %}
<b>Please correct the error below:</b>
<ul>
{% for error in formset.non_form_errors %}
<li style="color: red;">{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'userinfo/style.css' %}" >
<title>Confirmation</title>
</head>
<body>
<h2>Submitted Entries:</h2>
<form action="response" method="POST">{% csrf_token %}
{{ wizard.management_form }}
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th class="center">Location</th>
<th class="center">Overwrite</th>
</tr>
{% for name in names %}
<tr>
<td>{{ name.first_name }}</td>
<td>{{ name.last_name }}</td>
<td class="center">{{ location }}</td>
<td class="center" ><input type="checkbox" name="overwrite-{{ forloop.counter0 }}"></td>
</tr>
{% endfor %}
</table>
<p><input type="submit" value="Confirm">
<a href="{% url "addname" %}">
<button type="button">Cancel</button>
</a></p>
</form>
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Results</title>
</head>
<body>
<h2>Submitted Entries:</h2>
<ul>
{% for name in names %}
<li>{{ name.first_name }} {{ name.last_name }} {{ location }} {{ data }}</li>
{% endfor %}
</ul>
<p><a href="{% url "addname" %}">Add more names</a></p>
</body>
</html>