Django 从一个表单创建多个对象(相同模型)

Posted

技术标签:

【中文标题】Django 从一个表单创建多个对象(相同模型)【英文标题】:Django Create Multiple Objects (Same Model) From One Form 【发布时间】:2017-05-07 12:12:51 【问题描述】:

我已经研究这个问题几天了,但没有运气。希望有人可以提供帮助。

假设我们有以下模型:

User model (django.contrib.auth.models)

class Children(models.Model):
    name = models.CharField(max_length=200, blank=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

目标:当新用户想要创建帐户时,他们将填写用户表单并能够将 x 数量的孩子添加到他们的帐户中。本质上,模板将有一个用户表单,以及 x 数量的子表单(取决于用户有多少孩子)都捆绑在同一个

标记下。

我在创建视图时使用了这个引用:https://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/

视图看起来应该可以工作。我的问题是模板。诀窍是我不确定每个新用户会有多少个孩子,所以我无法对孩子表单进行硬编码。有谁知道这个问题需要什么样的模板或如何实现我的目标?

【问题讨论】:

您正在寻找表单集,尤其是inline formsets。先让它为固定数量的子表单工作,然后你可以使用 javascript 动态添加子表单。 【参考方案1】:

我知道现在回答这个问题有点晚了,但我发现这个没有答案,我想我可以贡献一下 对此可以有多种解决方案。 我可以提一个我相信会满足你需要的。

<!--This is the form for parents and Javascript inserts Dynamic Fields -->
<form id="parent_form" method="POST" action="% url 'url_name' %">
    <input type="text" name="parent_name">
    <input id="child_count" onchange="inject_child_details()" 
    type="number" name="number_of_children" min=0>
     <div id="child_details">
        enter code here
     </div>
</form>
<script type="text/javascript" nonce="script_nonce">
function inject_child_details() 
  var x = document.getElementById("child_count").value;
  details_div = document.getElementById("child_details");
  details_div.innerhtml = ''

    for(var index = 1;index <= x;)
    details_div.insertAdjacentHTML('beforeend','<input type="text" name="child'+index+'name" placeholder="Name of Child '+index+'">');
    index = index +1;
    


</script>

要插入的 HTML 应该在一行中,或者应该用

截断

'+ 下一行应该从上面的倒置开始 +'

【讨论】:

以上是关于Django 从一个表单创建多个对象(相同模型)的主要内容,如果未能解决你的问题,请参考以下文章

Django:无法创建与一个普通模型具有一对一关系的多个模型对象

django:如何从包含外键的多个模型中制作一个表单

将 JSONField 解压缩到多个 django 表单字段中

如何从模型中获取一个项目并使用表单 django 将相同的项目保存在另一个模型中

如何在 Django 中从 2 个不同的模型对象创建表单对象?

Django 动态表单,带有 HTML 数组的表单集