2016-06-29 40 views
0

我有问题多次保存我的表单。我希望用户用尽可能多的尺寸填写我的表单(这是表单),如果他们这样做了一次,只需将一条记录插入到我的数据库中,如果他们做了两个维度,则将每个记录保存到我的数据库中,共计两条新记录。任何帮助了解这一点将不胜感激。问题在django中使用ajax保存多个记录

这里是我的ajax

function SaveDim() { 

    $.ajax({ 
     type: "POST", 
     url: "/sheet/sheet_form_create.html/_dim", 
     //dataType: "json", 
     data: $('#dim_form').serialize() 
      + 
      "&description=" + $('#id_description').val() + 
      "&style=" + $('#id_style').val() + 
      "&target=" + $('#id_target').val() + 
      "&upper_limit=" + $('#id_upper_limit').val() + 
      "&lower_limit=" + $('#id_lower_limit').val() + 
      "&inspection_tool=" + $('#id_inspection_tool').val() + 
      "&critical=" + $('#id_critical').val() + 
      "&units=" + $('#id_units').val() + 
      "&metric=" + $('#id_metric').val() + 
      "&target_strings=" + $('#id_target_strings').val() + 
      "&ref_dim_id=" + $('#id_ref_dim_id').val() + 
      "&nested_number=" + $('#id_nested_number').val() + 
      "&posistion=" + $('#id_position').val() + 
      "&met_upper=" + $('#id_met_upper').val() + 
      "&met_lower=" + $('#id_met_lower').val() + 
      "&valc=" + $('#id_valc').val() + 
      "&sheet_id=" + $('#id_sheet_id').val() + 
      "", 
     success: function (json) { 
      console.log(json); 
      alert(json); 

     } 
    }); 
} 

这里是我的views.py(add_dimension)方法

def add_dimensions(request): 
    if request.method == 'POST': 
    c_date = datetime.now() 
    u_date = datetime.now() 
    description = request.POST.get('description') 
    style = request.POST.get('style') 
    target = request.POST.get('target') 
    upper_limit = request.POST.get('upper_limit') 
    lower_limit = request.POST.get('lower_limit') 
    inspection_tool = request.POST.get('inspection_tool') 
    critical = request.POST.get('critical') 
    units = request.POST.get('units') 
    metric = request.POST.get('metric') 
    target_strings = request.POST.get('target_strings') 
    ref_dim_id = request.POST.get('ref_dim_id') 
    nested_number = request.POST.get('nested_number') 
    met_upper = request.POST.get('met_upper') 
    met_lower = request.POST.get('met_lower') 
    valc = request.POST.get('valc') 
    sheet_id = request.POST.get('sheet_id') 
    data = {} 
    dim = Dimension( 
      description=description, 
      style=style, 
      target=target, 
      upper_limit=upper_limit, 
      lower_limit=lower_limit, 
      inspection_tool=inspection_tool, 
      critical=critical, 
      units=units, 
      metric=metric, 
      target_strings=target_strings, 
      ref_dim_id=ref_dim_id, 
      nested_number=nested_number, 
      met_upper=met_upper, 
      met_lower=met_lower, 
      valc=valc, 
      sheet_id=sheet_id, 
      created_at=c_date, 
      updated_at=u_date) 
    dim.save() 
    data['description'] = dim.description; 
    data['style'] = dim.style; 
    data['target'] = dim.target; 
    data['upper_limit'] = dim.upper_limit; 
    data['lower_limit'] = dim.lower_limit; 
    data['inspection_tool'] = dim.inspection_tool; 
    data['critical'] = dim.critical; 
    data['units'] = dim.units; 
    data['metric'] = dim.metric; 
    data['target_strings'] = dim.target_strings; 
    data['ref_dim_id'] = dim.ref_dim_id; 
    data['nested_number'] = dim.nested_number; 
    data['met_upper'] = dim.met_upper; 
    data['met_lower'] = dim.met_lower; 
    data['valc'] = dim.valc; 
    data['sheet_id'] = dim.sheet_id; 
    return HttpResponse(json.dumps(data), content_type="application/json",) 

    else: 
     dim_form = DimForm() 
     return render(request, 'app/_dim.html', {'dim_form': dim_form})  

型号

class Dimension(models.Model): 
    description = models.CharField(max_length=255) 
    style = models.CharField(max_length=255) 
    created_at = models.DateField() 
    updated_at = models.DateField() 
    target = models.IntegerField() 
    upper_limit = models.IntegerField() 
    lower_limit = models.IntegerField() 
    inspection_tool = models.CharField(max_length=255) 
    critical = models.IntegerField() 
    units = models.CharField(max_length=255) 
    metric = models.CharField(max_length=255) 
    target_strings = models.CharField(max_length=255) 
    ref_dim_id = models.IntegerField() 
    nested_number = models.IntegerField() 
    #position = models.IntegerField() 
    met_upper = models.IntegerField() 
    met_lower = models.IntegerField() 
    valc = models.CharField(max_length=255) 
    sheet = models.ForeignKey(Sheet, on_delete=models.CASCADE, default=DEFAULT_FOREIGN_KEY) 

Screen Shot

+0

你可以分享你的模型定义是什么?它应该工作,但我有一些建议(在模型级别定义updated_at和created_at,不混合POST和GET,使用django表单验证数据...)。另一方面,如果您有错误消息,请分享。 – szaboat

+0

我更新了我的问题@szaboat - 我没有错误一切工作正常,但是当试图保存倍数它总是相同的数据,即使我改变文本值。 – Snowman08

回答

1

变化变化dim.save()Dimension.objects.create()

https://stackoverflow.com/a/23926742/475565

还应更改ID的上课

$('.dim_form').on('submit', function(){ 
    var data = $(this).serialize(); 

    // send the ajax call here. $(this) is the form instance 
    var description = $(this).find('input[name=description]').val(); 
    ... 
}); 
+0

我为这个问题的更好的例子添加了一个屏幕截图@szaboat – Snowman08

+0

因为我的屏幕截图显示了相同的暗淡形式,但多次因为我点击按钮两次以添加维度,但是当我保存昏暗时,它总是保存第一个值因为在第二个应该是外部描述,因为你可以在我的控制台中看到它仍然设置为内@szaboat – Snowman08

+0

嗯,好吧,我想我明白了。你总是发送相同的数据。表单ID应该是唯一的。你在页面上有多个表单,但是你引用了一个,我猜你总是发送相同的数据。即使页面上有多个,$('#dim_form')也会一直选择相同的。尝试从您编辑的JavaScript获取表单。 – szaboat