我有一个简单的表单,这是我的视图代码的一部分:
if request.method == 'POST':
form = testForm( request.POST )
if form.is_valid():
record = form.save(commit=False)
record.save()
一切都很好,这些工具可以保存数据,但我试图发送多条记录,我的意思是我发送一个实例10条记录,但程序只能保存一条。
解决这个问题的最佳解决方案是什么?
提前致谢,
答案 0 :(得分:0)
发送10条记录不会为您创建10条记录。您提供的代码只会尝试:
您必须循环 n次才能创建 n-bound形式/模型实例。
首先:以一种很好的方式在POST请求中发送数据,以便您可以在视图中正确分隔它。 词典列表可能是不错的选择。类似的东西:
[{' Field1':' some_value' ,' Field2':' some_value',...},
{' Field1':' some_value' ,' Field2':' some_value',...},
{' Field1':' some_value' ,' Field2':' some_value',...} ...]
现在在views.py中,循环浏览此列表,如:
if request.method == 'POST':
for single_data_instance in request.POST:
form = testForm(single_data_instance)
if form.is_valid():
record = form.save(commit=False)
record.save()
修改强>
如果你想要一个经典的for-loop之外的东西那么,
有django's bulk_create() function。但我必须警告你,有一些警告。您可以在上面给出的链接中看到所有这些内容。
但遗憾的是,bulk_create()
的功能尚未扩展到ModelForms。您将不得不使用save()
方法进行一些更改,这将是一个很大的开销。
您也可以使用lambda函数,但在这种情况下它只会让事情变得更加麻烦。
所以在我看来,为什么不使用经典的for循环呢?
最后:如果您的html的name
属性相同,则无关紧要。如:
<input type="text" name="test">
<input type="text" name="test">
绑定表单只能占用其中定义的字段(显式声明或通过ModelForm元声明)。发送字典超过表单可以使用的字典是没有用的。它只是忽略它。
希望这会对你有所帮助。感谢。