Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MongoEngine QuerySet插入调用默认函数两次_Python_Model_Insert_Mongoengine - Fatal编程技术网

Python MongoEngine QuerySet插入调用默认函数两次

Python MongoEngine QuerySet插入调用默认函数两次,python,model,insert,mongoengine,Python,Model,Insert,Mongoengine,我必须插入多条记录,并且mongoengine中有一个用于QuerySet的方法,该方法允许使用单个方法调用创建多条记录 我的模型有default方法,如果没有为列指定属性,则应该调用该方法。但是,在插入的情况下,我们必须提供文档对象,当我们创建文档对象时,它调用默认值,第二次在执行插入时调用默认值。我有如下代码 from mongoengine import Document from mongoengine import StringField def get_name(): p

我必须插入多条记录,并且
mongoengine
中有一个用于
QuerySet
的方法,该方法允许使用单个方法调用创建多条记录

我的模型有
default
方法,如果没有为列指定属性,则应该调用该方法。但是,在
插入
的情况下,我们必须提供
文档
对象,当我们创建
文档
对象时,它调用默认值,第二次在执行
插入
时调用默认值。我有如下代码

from mongoengine import Document
from mongoengine import StringField


def get_name():
    print("*"*80)
    print('getname')
    print("*"*80)
    return 'first_name'


class User(Document):
    email = StringField(required=True)
    first_name = StringField(max_length=50, default=get_name)
    last_name = StringField(max_length=50)


if __name__ == '__main__':
    from mongoengine import connect
    connect('test', host="mongodb://127.0.0.1:27017/test")
    m = User(email='test@test.com')

    User.objects.insert(m)
当我运行它时,它会给出类似的输出

python /tmp/test.py
********************************************************************************
getname
********************************************************************************
********************************************************************************
getname
********************************************************************************
意思是当我们做
m=User(email=)时调用
get\u name
test@test.com“)
和第二次调用时,
User.objects.insert(m)

我真正的默认函数是递增数字,并以此递增2倍

我知道,我们可以使用
Document.save
来保存文档,但是如果
multiple
条目,我必须多次调用
save

是否仍然存在确保只调用一次函数的默认值