Я попробовал Django-nonrel
(который является вилкой NoSQL проекта Django) с MongoDB
. В нем ORM класс может наследовать только от абстрактного класса, поэтому даже два класса наследуются от одного и того же базового класса, они сохраняются в разных коллекциях в MongoDB.
Этот проект добавил предопределенную схему в базу данных без схемы, каждая коллекция имеет свою уникальную схему.
Я хочу, если ClassA и ClassB унаследованы от BaseClass, каждый экземпляр ClassA и ClassB должен быть помещен в ту же коллекцию (или что-то подобное в NoSQL, кроме MongoDB)
Цель Django-нерела состоит в том, чтобы поддерживать то же поведение, что и Django ORM, но разрешить использование резервных копий без реляционной памяти. Поскольку Django не позволяет хранить несколько разных моделей в одной и той же (реляционной) таблице, я не удивлюсь, узнав, что Django-нереал также не является.
Если вы хотите, чтобы вы описали поведение, вы можете проверить MongoDyno, ODM (object-document mapper) для MongoDB, который вдохновлен и похож на Django ORM, но который позволяет использовать более гибкие схемы и поведения, например тот, который вы описали.
В частности, при использовании Mongoengine вы можете создавать несколько классов, записи которых хранятся в одной коллекции, например:
class BlogPost(mongoengine.Document):
create_date = mongoengine.DateTimeField()
mod_date = mongoengine.DateTimeField()
title = mongoengine.StringField()
meta = {
'abstract': True,
}
def save(self):
if not self.pk:
self.create_date = datetime.utcnow()
self.mod_date = datetime.utcnow()
super(BlogPost, self).save()
class TextBlogPost(BlogPost):
body = mongoengine.StringField()
class ImageBlogPost(BlogPost):
image = mongoengine.FileField()
caption = mongoengine.StringField()
Поскольку TextBlogPost
и ImageBlogPost
наследуются от BlogPost
, они оба будут сохранены в одной коллекции (по умолчанию, с именем "blog_post").