Цель Django-nonrel - поддерживать то же поведение, что и в Django ORM, но разрешить использование нереляционных бэкэндов хранения. Поскольку Django не позволяет хранить несколько разных моделей в одной (реляционной) таблице, я не удивлен, узнав, что Django-nonrel тоже не может.
Если вы хотите описанное вами поведение, вы можете проверить Mongoengine , ODM (объект-документ-сопоставитель) для 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").