如何确保表单数据在Django中正确发布
我使用来自Ajax回调的数据填充Django表单集(不包括一些由用户手动填充的表单元素)。我正在尝试自动填充大多数表单元素以消除错误。但是,在“发布”时,数据不会保存在相应的模型中 使用相同的过程,我能够创建记录(用户(手动)填写数据)无法找出我的错误所在? 型号.py:如何确保表单数据在Django中正确发布,django,modal-dialog,inline-formset,Django,Modal Dialog,Inline Formset,我使用来自Ajax回调的数据填充Django表单集(不包括一些由用户手动填充的表单元素)。我正在尝试自动填充大多数表单元素以消除错误。但是,在“发布”时,数据不会保存在相应的模型中 使用相同的过程,我能够创建记录(用户(手动)填写数据)无法找出我的错误所在? 型号.py: class mappedTargModel(models.Model): mapper_id = models.AutoField(primary_key=True, verbose_name='Map ID')
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')
视图.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)
模板
<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>
{%csrf_令牌%}
添加新映射器
&时代;
{{target_model_form.as_p}
{{target_field_formset.management_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案例以执行某些操作