Я хочу добавить поля, связанные с отметкой времени, как в унаследованные документы класса EmbededDocument, так и в унаследованные документы обычного класса Document.
Поскольку классы 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, но хочу избежать того же.