我用Django-nonrel
尝试了MongoDB
(这是Django项目的NoSQL分支)。在它的ORM中,类只能从抽象类继承,所以即使两个类继承自同一个基类,它们也会被保存到MongoDB中的不同集合中。
此设计为无架构数据库添加了预定义架构,现在每个集合都有其独特的架构。
我想要的是,如果ClassA和ClassB是从BaseClass继承的,那么ClassA和ClassB的每个实例都应该放在同一个集合中(或者除了MongoDB之外的NoSQL中类似的东西)
答案 0 :(得分:3)
Django-nonrel的目标是保持与Django的ORM相同的行为,但允许使用非关系存储后端。由于Django不允许将多个不同的模型存储在同一个(关系)表中,因此我不会惊讶地发现Django-nonrel也没有。
如果你想要你所描述的行为,你可以查看Mongoengine,一个用于MongoDB的ODM(对象文档映射器),它受到Django ORM的启发,并且具有与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”)。