使用 django 动态添加输入字段并将数据保存到数据库

Posted

技术标签:

【中文标题】使用 django 动态添加输入字段并将数据保存到数据库【英文标题】:Dynamically add input fields and save data to Database using django 【发布时间】:2017-08-31 23:26:01 【问题描述】:

我想将多个数据保存到具有自动递增 ID(1、2、3...等)的数据库中,而不是在同一列中。用户可以动态添加输入字段,最后点击提交按钮将数据保存到数据库中,每个字段都有不同的 id(自动递增 id)。

我在单击按钮时对添加输入字段进行了 html 和 J 查询。但我不知道使用 django 将其存储在数据库中。我在 view.py 文件中没有做任何事情来存储它。

enter image description here 这是使用 HTML 和 Jquery 添加字段的代码

【问题讨论】:

Id 默认为自增字段。您需要预先定义用户可以在模型中添加哪些文件。不建议向数据库添加列取决于用户。如果您想从 JS 发送 JSON 数据并将其存储在数据库中,我建议您使用 django rest 框架。 【参考方案1】:

HTML:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
   $(function()
   var i =0;

  $('#adduser").click(function()
      var AnswerHTML = "";
      AnswerHTML ='<div class="form-group" style="border: 1px solid;background-color: #ADD8E6">'
    +' <div class="col-xs-4"><input type="text" name="firstname'+i+'"> </input></div>'
    +' <div class="col-xs-4"><input type="text" name="age'+i+'">  </input></div>'
    +' <div class="col-xs-4"><input type="text" name="relation'+i+'"></input></div>'
    +'<i class="icon-trash" style="padding-left:20px;  cursor: pointer;"></i></div>';


  $('#divQuatationList').append(AnswerHTML);
  i++;
   $("#totallength").val(i);

 );
);
$(document).on("click",".icon-trash",function(e)

$(this).closest('.form-group').remove();
);
</script>

<body>
<div>
<p id='adduser' class='btn btn-info' >ADD</p>
</div>

<form class="form-horizontal row-border" action="% url "Saveforms" %" method="post">
<input type="hidden" id="totallength" name="totallength"  />
<div id="divQuatationList"></div>
<div class="col-md-12"><input type="submit" id="Submit" class="btn btn-info pull-right" value="SaveData"  />
</form>
</body>
</html>

 URL 

 url(r'^Saveforms/$', views.Saveforms, name='Saveforms'),


 Views

 def Saveforms(request):

 lenth =  request.POST['totallength']

 if request.POST:
    i = 0
    for index in range(i,int(lenth)):
        firstname =""
        age =""
        relation =""
        flag=0
        if 'firstname'+str(index) in request.POST:
            firstname= request.POST['firstname'+str(index)]
            flag = 1
        if 'age'+str(index) in request.POST:
            age= request.POST['age'+str(index)]
            flag = 1
        if 'relation'+str(index)  in request.POST:
            relation= request.POST['relation'+str(index)]         
            flag = 1

        if flag == 1: 

             UserName.objects.create(firstname=firstname,age=age,relation=relation)               

return HttpResponseRedirect("/dynamicform/Manageforms/")

【讨论】:

数据库中只存储一行值。 我已经更新了一些逻辑。也通过打印检查你传递了多少行

以上是关于使用 django 动态添加输入字段并将数据保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在编辑内容并将javascript变量传递给它的新输入字段后将Django“forms.ModelForm”保存在数据库中

CakePHP:向表单添加字段(动态)

Django 动态表单保存

如何使用 jquery 和 Ajax 将多个文件字段保存到 django

在 JSF 2.0 中动态创建输入字段并将其链接到支持 bean

django - 动态添加 django 表单字段并保留用户输入