【问题标题】:Issue's saving multiple records with ajax in django问题在 Django 中使用 ajax 保存多条记录
【发布时间】:2016-11-01 00:56:15
【问题描述】:

我多次保存表单时遇到问题。我希望用户用尽可能多的维度填写我的表单(这是表单)所以,如果他们做了一次,如果他们做了两个维度,则只将一条记录插入我的数据库,将每个记录保存到我的数据库,总共两条新记录.任何解决此问题的帮助将不胜感激。

这是我的 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) 

【问题讨论】:

  • 你能分享你的模型定义吗?它应该可以工作,但我有一些建议(在模型级别定义 updated_at 和 created_at,不混合 POST 和 GET,使用 django 表单验证数据......)。另一方面,如果您有错误消息,请分享。
  • 我更新了我的问题@szaboat——我没有错误一切正常,但是当我尝试保存多个时,即使我更改了文本值,它总是相同的数据。

标签: javascript python ajax django


【解决方案1】:

dim.save()更改为Dimension.objects.create()

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

您还应该将 id 更改为 classes

$('.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();
  ...
});

【讨论】:

  • 我添加了一个屏幕截图来更好地说明问题@szaboat
  • 因为我的屏幕截图显示了相同的暗淡形式,但由于我单击按钮两次添加维度而多次显示,但是当我保存暗淡时,它总是与第一个值一起保存,因为第二个应该是外部的如您在我的控制台中看到的描述,它仍然设置为内部@szaboat
  • 嗯,好的,我想我明白了。你总是发送相同的数据。表单 ID 应该是唯一的。您在页面上有多个表单,但您引用的是一个,我猜您总是发送相同的数据。 $('#dim_form') 将始终选择相同的,即使页面上有多个。尝试从您编辑的 javascript 中获取表单。
  • 将输入的 id 更改为名称,您可以按名称引用它们。 id 总是唯一的。如果有多个当前浏览器将获得第一个。
  • 是的,但这就是问题所在。下面是我整理的一个小示例,用于说明处理页面上的多个表单必须执行的操作。 jsbin.com/kimafobigo/edit?html,css,js,output
猜你喜欢
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多