Skip to main content
 首页 » 编程设计

python之Django 在模型中保存 JSON 数据时出错

2024年12月31日24小虾米

我尝试使用此代码将我的 JSON 数据保存到我的模型 Mvouchar。但是得到这个错误。我很容易通过 cmd 获取数据,但我试图将其保存在我的模型中然后我得到错误,为什么会发生这种情况,我认为我犯了一些小错误但无法捕捉如果你遇到我的问题请帮助

#views.py 
@csrf_exempt 
def jsdata(request): 
    table_data = json.loads(request.POST.get('MyData')) 
    print(table_data) 
    for data in table_data: 
	    b_no = request.POST['billno'] 
	    b_details = request.POST['billdetails'] 
	    at = request.POST['amount2'] 
	    record = Mvouchar(bill_no = data.b_no, bill_details = data.b_details,am=data.at) 
	   record.save() 
    return render(request, 'cheque/mvouchar.html', {'msg': 'Data Saved.'}) 
     
#models.py 
 
class Mvouchar(models.Model): 
	related = models.ForeignKey(Signs, on_delete=models.CASCADE, null=True, blank=True) 
	bill_no = models.CharField(max_length=80, null=True, blank=True) 
	bill_details = models.CharField(max_length=1000, null=True, blank=True) 
	am = models.CharField(max_length=30, null=True, blank=True) 
	vouchar_no = models.CharField(max_length=1000, null=True, blank=True) 
   
#urls.py 
 
url(r'jsondata/$', views.jsdata, name='jsondata'), 
 
#script 
<script> 
$("#btnjson").click(function () { 
			var array1 = []; 
					$("tbody tr").each(function () { 
                        var firstTableData = {}; 
                        firstTableData.BillNo = $(this).find('td').eq(0).text(); 
                        firstTableData.BillDetails = $(this).find('td').eq(1).text(); 
                        firstTableData.Amount = $(this).find('td').eq(2).text(); 
                        array1.push(firstTableData); 
                    //} 
                });  
				alert(JSON.stringify(array1)); 
				 $.ajax({ 
				type: "POST", 
				url: "/jsondata/", 
				dataType: 'json', 
				data: {MyData: JSON.stringify(array1)}, 
				success: function(msg){ 
                alert(msg); 
            } 
        }); 
        return false; 
    } ); 
			}); 
</script>

请您参考如下方法:

from django.http import JsonResponse 
    def jsdata(request): 
        table_data = json.loads(request.POST.get('MyData')) 
        # print(table_data) 
        r_data = { 
            'success': True, 
        } 
        for data in table_data: 
            # Since you are just creating objects you don't need to save created object in a variable. 
            try: 
                Mvouchar.objects.create(bill_no = data['BillNo'], bill_details=data['BillDetails'],at=data['Amount']) 
            except: 
                r_data['success'] = False 
 
        # IMO Views responding to ajax requests should send JsonResponse 
        if r_data['success']: 
            r_data['msg'] = 'Data Saved' 
        else: 
            r_data['msg'] = 'Not all Data Saved' 
        return JsonResponse(r_data)