我想将时间戳相关字段添加到EmbededDocument类继承的文档和常规的Document类继承的Documents中。
由于EmbededDocument和Document类不能在mongoengine中混合,我必须创建一个基类并尝试通过多继承来使用它。
这就是我所做的
class SikkaBase():
# Passing a callable as default
created_on = DateTimeField(default=datetime.now)
updated_on = DateTimeField(default=datetime.now)
is_deleted = BooleanField(default=False)
# Update the updated_on field for every update
def update(self, *args, **kwargs):
self.updated_on = datetime.now()
super(SikkaBase, self).save(*args, **kwargs)
# Update the created_on field for every updates
def save(self, *args, **kwargs):
self.updated_on = datetime.now()
super(SikkaBase, self).save(*args, **kwargs)
class SikkaBaseDocument(Document, SikkaBase):
meta = {
'abstract': True
}
class SikkaEmbededBaseDocument(EmbeddedDocument, SikkaBase):
meta = {
'abstract': True
}
这会抛出错误
File ".../sikka_env/lib/python2.7/site-packages/mongoengine/base/metaclasses.py", line 305, in __new__
if b.__class__ == TopLevelDocumentMetaclass]
AttributeError: class SikkaBase has no attribute '__class__'
我对我的解决方案不太确定,因为SikkaBase类与MongoEngine没有任何关系,也不确定它是多么相关。
寻找任何可能的解决方案。我总是可以在SikkaBaseDocument和SikkaEmbededBaseDocument类中复制相同的代码,但是希望避免这样做。
答案 0 :(得分:0)
看起来旧式类没有__class__
属性,因此您应该从object
继承。改变你的第一行
class SikkaBase():
到
class SikkaBase(object):
应解决此问题。