【发布时间】:2020-10-18 18:43:29
【问题描述】:
在我的 Django 应用程序中,我使用了两个函数视图,FV1 和 FV2。
FV1 用于从数据库中捕获数据并填充表单/表单集。
在 FV2 中,我尝试使用 Ajax 从页面发送序列化数据(带有上述数据),验证 FV2 中的数据并保存,最后在页面中接收来自 FV2 的确认作为 Ajax 回调。
在控制台中我可以看到序列化的数据。验证发生的事实证明,如果未键入所需值之一,则相关else: 段中捕获的错误消息将传递到控制台。
但是,如果正确输入了所有数据并提交了表单,则数据不会保存在相应的模型中。也没有错误信息。
鉴于上述情况,实现目标的方法应该是什么。不用说,我错过了一些大事。非常感谢您提供解决问题的指导。
编辑
models.py:
class mapTarg(models.Model):
map_id = models.AutoField(primary_key=True, verbose_name='Map ID')
map_name = models.CharField(max_length=50, verbose_name='Map name')
map_target = models.CharField(max_length=100, verbose_name='Target')
class mapTargItems(models.Model):
map_itm = models.AutoField(primary_key=True, verbose_name='Item')
map_hdr = models.ForeignKey(mapTarg, related_name='map_hdr_tab', on_delete=models.CASCADE, verbose_name='Mapper')
map_field = models.CharField(max_length=100, verbose_name='Target Fld')
map_field_col = models.CharField(max_length=25, verbose_name='Col')
views.py:
def SaveMapAjax(request, object_id=False):
if object_id:
qs_targ_model_form = mapTarg.objects.get(pk=object_id)
else:
qs_targ_model_form = mapTarg()
target_field_formset = CreateMappedTargFieldsFormset()
if request.method == 'POST' and request.is_ajax():
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()
msg='Data saved!'
else:
msg= 'Error occured..'
return JsonResponse(msg, safe=False)
ajax 函数
$(function() {
$('#btnSaveMap').on('click', function() { // "Save" button
var frm = $('#dataMapperForm'); // Form id
$.ajax({
type: frm.attr('method'),
url: '{% url 'save_mapper' %}', // Url pointing to view for saving data
data: frm.serialize(),
success: function(data) {
console.log('Success !!');
console.log(data);
},
error: function(data) {
console.log('Problemo');
console.log(data);
},
});
});
});
【问题讨论】:
-
你检查过 Django Rest 框架吗?它将为您节省大量时间,非常成熟且有据可查。另一方面,如果不查看您的代码,几乎不可能提供帮助。如果您可以同时包含 FBV 和模型,那么人们应该可以为您提供帮助。
-
@anowlinorbit - 添加了代码。同时检查 REST。
标签: jquery django ajax django-views