I am populating Django formset with data from Ajax callback (barring a few form elements which are to be filled manually by the user). I am trying to automate filling most of the form elements to eliminate error. However, while "POST"ing, the data does not get saved in respective models.
Using the same process I am able to create records (where data is filled (manually) by the user). Can't find out where I am going wrong?
models.py:
class mappedTargModel(models.Model):
mapper_id = models.AutoField(primary_key=True, verbose_name='Map ID')
mapper_name = models.CharField(max_length=50, verbose_name='Mapper name')
mapper_target_model = models.CharField(max_length=100, verbose_name='Target Table')
mapper_long_text = models.CharField(max_length=250, null=True, blank=True, verbose_name='Long Text')
class mappedTargFields(models.Model):
mapper_item = models.AutoField(primary_key=True, verbose_name='Item Number')
mapper_header = models.ForeignKey(mappedTargModel, related_name='mapper_hdr_tab', on_delete=models.CASCADE, verbose_name='Mapper')
mapped_field = models.CharField(max_length=100, verbose_name='Target Field')
mapped_field_verb_name = models.CharField(max_length=100, verbose_name='Name')
mapped_field_col_name = models.CharField(max_length=25, verbose_name='Col Name')
mapped_field_fk_table = models.CharField(max_length=100, verbose_name='Field Related To')
views.py
def MapperDataImportConstruct(request, object_id=False):
template = "map/mapper_construct.html"
if object_id:
qs_targ_model_form = mappedTargModel.objects.get(pk=object_id)
else:
qs_targ_model_form = mappedTargModel()
target_field_formset = CreateMappedTargFieldsFormset()
if request.method == 'POST':
new_qs_targ_model_form = mappedTargModelForm(data=request.POST, instance=qs_targ_model_form)
if new_qs_targ_model_form.is_valid():
qs_targ_model_form = new_qs_targ_model_form.save(commit=False)
target_field_formset = CreateMappedTargFieldsFormset(request.POST, instance=qs_targ_model_form)
if target_field_formset.is_valid():
qs_targ_model_form.save()
target_field_formset.save()
else:
new_qs_targ_model_form = mappedTargModelForm()
target_field_formset = CreateMappedTargFieldsFormset(instance=qs_targ_model_form)
context = {
'target_model_form': new_qs_targ_model_form,
'target_field_formset': target_field_formset,
# .... (context objects for getting values from Ajax callback)
# .... (context objects for getting values from Ajax callback)
}
return render(request, template, context)
Template
<form action="" method="POST" class="form" id="add_new_mapper_form" novalidate>
{% csrf_token %}
<div class="modal-content">
<div class="modal-header modal-title">
<h5 class="modal-title" id="addNewProductModalFormLabel">Add New Mapper</h5>
<button type="button" id="btnCloseModalX" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
{{ target_model_form.as_p }}
<div class="col-md-12 text-nowrap" style="font-family:'Courier New'">
{{ target_field_formset.management_form }}
</div>
</div>
<div class="modal-footer">
<input type="submit" id="btnSaveAsMappedModal" class="btn btn-info" value="Save">
<input type="button" id="btnCloseModal" class="btn btn-info" value="Close" data-dismiss="modal">
</div>
</div>
</form>