I need to dynamically add a number of fiedlists in flask-wtforms and then send it back to a database. The idea is that the user adds his details and then can add a number of rows. I'm able to add the rows in a table using jquery but I'm pretty lost on how to actually send that back my view and into the database. It works for one row but when with more rows it just deletes the other rows and keeps the first row with the data in it. Any help would be much appreciated.
forms.py
class subProdData(FlaskForm):
itemnmbr = StringField('Item number/Job Description', validators=[DataRequired()])
jobStart = TimeField('Job Start time', validators=[DataRequired()])
jobEnd = TimeField('Job End Time', validators=[DataRequired()])
qty = IntegerField('Qty', validators=[DataRequired()])
employee = IntegerField('Employees Id Number', validators=[DataRequired()])
class prodData1(FlaskForm):
date = DateField('Date', format='%Y-%m-%d', validators=[DataRequired()])
department = SelectField('Department:', validators=[DataRequired()])
shift = SelectField('Shift:', choices=[(1), (2)], validators=[DataRequired()])
supervisor = SelectField('Supervisor', validators=[DataRequired()])
employeesNum = IntegerField('# of employees:')
notes = TextAreaField('Notes:', validators=[Length(min=0, max=140)])
jobInfo = FieldList(FormField(subProdData), min_entries=1)
submit = SubmitField('Submit')
addForm.html
<form method="POST">
{{ form.csrf_token }}
<div class="container">
<div class="content-section">
<h1>Add Data Report</h1>
<br/>
<div class="form-group required" id="supervisor"><label class="control-label">{{form.supervisor.label}}
{{ form.supervisor(class_='form-control')}}</div>
<div class="form-group required" id="shift"><label class="control-label">{{form.shift.label}}
{{ form.shift(class_='form-control')}}</div>
<div class="form-group required" id="date"><label class="control-label">{{form.date.label}}
{{ form.date(class_='form-control')}}</div>
</div>
<div class="formdepartment" id="shift"><label class="control-label">{{form.department.label}}
{{ form.department(class_='form-control')}}</div>
<div class="formdepartment" id="employee"><label class="control-label">{{form.employeesNum.label}}
{{ form.employeesNum(class_='form-control')}}</div>
<div class="Notes">
<div class="formnotes" id="notes"><label class="control-label">{{form.notes.label}}
{{ form.notes(class_='form-control')}}</div>
</div>
<div data-toggle="fieldset" id="job-fieldset" class="form-group">
<table class="ui table" id="tab1">
<thead>
<th>Item #/Job Description</th>
<th>Job Start Time</th>
<th>Job End Time</th>
<th>Qty</th>
<th>Employees ID Number</th>
</thead>
<tbody>
{% for e in form.jobInfo %}
<tr data-toggle="fieldset-entry">
<td>{{ e.itemnmbr(class_='form-control') }}</td>
<td>{{ e.jobStart(class_='form-control') }}</td>
<td>{{ e.jobEnd(class_='form-control') }}</td>
<td>{{ e.qty(class_='form-control') }}</td>
<td>{{ e.employee(class_='form-control') }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{{form.submit}}
<input type="button" value="add entry" id="add">
</form>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
$(document).ready(function(){
$("#add").click(function(e){
event.preventDefault()
$('#tab1').append('{% for e in form.jobInfo %}<tr data-toggle="fieldset-entry"><td>
{{e.itemnmbr(class_='form-control')}}</td><td>{{e.jobStart(class_='form-control')}}</td><td>
{{e.jobEnd(class_='form-control')}}</td><td>{{e.qty(class_='form-control')}}</td><td>
{{e.employee(class_='form-control')}}</td>{% endfor %}');
});
});
</script>
{% endblock %}
routes.py
@app.route('/prodData/add', methods=['GET', 'POST'])
@login_required
def addProd():
form = prodData1(depData=current_user.username)
if form.validate_on_submit():
data1 = (str(form.date.data), str(form.department.data), int(form.shift.data), str(form.supervisor.data), int(form.employeesNum.data), int(form.employee.data), str(form.itemnmbr.data), str(form.jobStart.data), str(form.jobEnd.data), int(form.qty.data), str(form.notes.data) )
try:
sendProdData1(*data1)
flash('Submitted')
except Error as e:
print(e)
flash('error')
return redirect(url_for('prodData'))
return render_template('addProd1.html', form=form)
sendToDB.py
def sendProdData1(*args):
cursor2 = conn.cursor()
cursor2.execute(
"""INSERT INTO [dbo].[prodInput](input_date, department, shift, supervisor, number_of_employees, employee_id, item_number, job_start, job_end, produced_qty, notes)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""", args )