Python MongoEngine:';列表字段';对象没有属性';散装';

Python MongoEngine:';列表字段';对象没有属性';散装';,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,给定以下设置(减少): 我得到以下错误:AttributeError:'ListField'对象没有“in\u bulk”属性 File "/home/me/testSetup/test.py", line 310, in get return jsonify(parent.test) File "/home/me/lib/python3.7/site-packages/mongoengine/base/fields.py", line 3

给定以下设置(减少):

我得到以下错误:
AttributeError:'ListField'对象没有“in\u bulk”属性

  File "/home/me/testSetup/test.py", line 310, in get
    return jsonify(parent.test)
  File "/home/me/lib/python3.7/site-packages/mongoengine/base/fields.py", line 329, in __get__
    value = _dereference(value, max_depth=1, instance=instance, name=self.name)
  File "/home/me/lib/python3.7/site-packages/mongoengine/dereference.py", line 97, in __call__
    self.object_map = self._fetch_objects(doc_type=doc_type)
  File "/home/me/lib/python3.7/site-packages/mongoengine/dereference.py", line 174, in _fetch_objects
    references = collection.objects.in_bulk(refs)
AttributeError: 'ListField' object has no attribute 'in_bulk'
我不太清楚为什么会这样。我根本没有使用列表字段。我可以访问
name
\u id
,并且此设置以前与其他类一起使用过
returnjsonify(parent)
也起作用,它包括
test
字段及其所有值。有人有主意吗

编辑:我很傻,删除/删除了导致简化示例错误的部分。
test
字段实际上被称为
objects
。重命名它解决了错误。

使用原始mongoengine(无flask mongoengine),从一个新的数据库和一个简单的终端,以下代码正在运行

from mongoengine import *
from bson import ObjectId

connect("testdb")

class Parent(Document):
    _id = ObjectIdField(required=True, default=lambda: ObjectId(), primary_key=True)
    name = StringField(required=False)
    test = MapField(EmbeddedDocumentField('Child'), required=False)
    
class Child(EmbeddedDocument):
    _id = ObjectIdField(required=True, default=lambda: ObjectId(), primary_key=True)
    ref = ReferenceField('Parent')

p = Parent(name='aa', test={}).save()
p2 = Parent(name='bb', test={'test': Child(ref=p), 'test2': Child(ref=p)}).save()

print(Parent.objects(_id=p.id).first().test)

print(Parent.objects(_id=p2.id).first().test)
我建议您从这里开始,添加更复杂的代码,直到您能够确定是什么原因导致它崩溃


旁注,由于ObjectId是可调用的,您不需要将其包装在lambda中,只需在字段定义中使用
default=ObjectId
,因此
ObjectId字段(required=True,default=ObjectId,primary_key=True)

谢谢您指出这一点。
from mongoengine import *
from bson import ObjectId

connect("testdb")

class Parent(Document):
    _id = ObjectIdField(required=True, default=lambda: ObjectId(), primary_key=True)
    name = StringField(required=False)
    test = MapField(EmbeddedDocumentField('Child'), required=False)
    
class Child(EmbeddedDocument):
    _id = ObjectIdField(required=True, default=lambda: ObjectId(), primary_key=True)
    ref = ReferenceField('Parent')

p = Parent(name='aa', test={}).save()
p2 = Parent(name='bb', test={'test': Child(ref=p), 'test2': Child(ref=p)}).save()

print(Parent.objects(_id=p.id).first().test)

print(Parent.objects(_id=p2.id).first().test)