Django-の目標nonrelは、DjangoのORMと同じ動作を維持するが、非リレーショナルストレージバックエンドを使用できるようにすることです。 Djangoは複数の異なるモデルを同じ(リレーショナル)テーブルに格納することを許可していないので、Django-nonrelにも当てはまらないことに驚くことはありません。
説明したような動作をしたい場合は、MongoDBのODM(オブジェクトドキュメントマッパー)であるMongoengineをチェックしてみてください。これは、Django ORMに触発されていますが、あなたが説明したような行動をします。 TextBlogPost
とImageBlogPost
両方以来
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()
継承BlogPost
から、それらは両方とも同じに保存されます:Mongoengineを使用するときに特に
、あなたは、そのレコードのように同じコレクションに格納されている複数のクラスを作成することができますコレクション(デフォルトでは、 "blog_post"という名前)。
どのような関係でもない文書データベースのORMのポイントは何ですか?なぜすべての抽象化? dbドライバを直接使用した方が簡単だと思います。 – mnemosyn