我正在尝试制作一个mongodb数据库,下面的代码中有一些数据库文档,我正在尝试将模型分为两部分,一部分是公共的/型号.py我把抽象类放在文件里,另一部分放在监视器上/型号.py在这里我添加了一些类方法:
你知道吗普通.py地址:
class device(DynamicDocument):
hostname = StringField(required=True)
management = EmbeddedDocumentField(access)
interfaces = ListField(ReferenceField(interface))
loopback_addr = StringField()
meta = {'abstract': True}
class topology(DynamicDocument):
topology_name = StringField(required=True)
topology_desc = StringField(required=False)
devices = ListField(ReferenceField(device))
links = ListField(ReferenceField(link))
meta = {'abstract' : True}
你知道吗监视器.py(对于这个问题,类方法并不重要):
from mongoengine import *
from common.models import *
class device(device):
def connect(self):
driver = get_network_driver("ios")
device = None
try:
device = driver(self.management.management_address,self.management.username,
self.management.password)
device.open()
except Exception as e:
print(e)
return device
class topology(topology):
def do_things(self)
pass
现在,当我在创建一些实例后尝试获取拓扑的设备列表时:
mongoengine.connect("testdb",host = "0.0.0.0", port = 27017)
topology_ins = topology.objects()[0]
for dev in topology_ins.devices:
print(dev.hostname)
我收到这个错误:
Traceback (most recent call last):
File "models.py", line 45, in <module>
for dev in topology_ins.devices:
File "/usr/lib/python3.7/site-packages/mongoengine/fields.py", line 852, in _get_
return super(ListField, self).__get__(instance, owner)
File "/usr/lib/python3.7/site-packages/mongoengine/base/fields.py", line 282, in _get_
name=self.name
File "/usr/lib/python3.7/site-packages/mongoengine/dereference.py", line 92, in _call_
self.object_map = self._fetch_objects(doc_type=doc_type)
File "/usr/lib/python3.7/site-packages/mongoengine/dereference.py", line 174, in _fetch_objects
object_map[(collection, doc.id)] = doc
AttributeError: 'device' object has no attribute 'id
代码未被分割时不会发生错误
mongoengine的一些内部结构依赖于模型类名的唯一性,请尝试为具体类使用不同的名称(避免
class device(device):
和class topology(topology):
)编辑: 我能重现你的问题。在我这边,我可以通过在两个抽象类的
meta = {'abstract': True, 'allow_inheritance': True}
中指定allow_inheritance
来实现相关问题 更多 >
编程相关推荐