假设我有一个用户界面,可以让用户编辑一个集合中的多条记录并点击保存。
如何通过一次调用数据库让mongoengine保存所有这些记录?
目前,我正在迭代每个实例并调用其save()
方法,从而导致多次调用数据库。
即,
from mongoengine import Document, StringField
from django import forms
from django.forms.formsets import formset_factory
#models.py
class Foo(Document):
bar = StringField()
baz = StringField()
#forms.py
class FooForm(forms.form):
bar = CharField(required=False)
baz = CharField(required=False)
def save():
foo = Foo(id=self.cleaned_data['_id'][10:-2], #remove the {'$oid': '" prefix and }' ending
bar = self.cleaned_data['bar']
baz = self.cleaned_data['baz']
foo.save()
#views.py
def data(request):
FooFormSet = formset_factory(Foo, extra=0)
if request.method == 'POST':
formset = FooFormSet(request.POST)
for form in formset:
if form.has_changed:
form.save() # This results in multiple calls to the DB.
return HttpResponseRedirect(...)
else:
records = Foo.objects()
#records.to_json() returns a json string representation
#of an array that can be passed to the initial param
formset = FooFormSet(initial=json.loads(records.to_json()))
context = {'formset':formset}
return render(request, 'data.html', context)
暂时忽略我使用FooForm
中与Foo
中相同的字段重复工作。mongodbforms
。我无法让ModelFormSet
与data
一起使用。
在views.py
中的FooForm
方法中,我循环遍历表单集中的每个save()
,并调用{{1}},这会导致多次调用数据库。< / p>
在User Guide进行更新时,它仅提及保存单个记录,而不是一次保存多条记录。