有效地保存/更新mongoengine中的多个实例

时间:2014-10-13 19:53:11

标签: python django mongoengine

假设我有一个用户界面,可以让用户编辑一个集合中的多条记录并点击保存。

如何通过一次调用数据库让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。我无法让ModelFormSetdata一起使用。

views.py中的FooForm方法中,我循环遍历表单集中的每个save(),并调用{{1}},这会导致多次调用数据库。< / p>

User Guide进行更新时,它仅提及保存单个记录,而不是一次保存多条记录。

0 个答案:

没有答案