Django Nonrel – 使用noSQL解决多表继承问题?
我正在研究在Google的AppEngine上运行的
django-nonrel项目.我想为游戏创建一个模型,其中包含所有体育运动通常共有的细节 – 即游戏时间,状态,位置等.然后我为GameBasketball,GameBaseball等建模了特定的类,并且这些类继承自基类.
这会产生一个问题但是如果我想在某一天检索所有游戏的内容: Game.objects.filter(gametime=mydate) 这将返回错误: DatabaseError: Multi-table inheritance is not supported by non-relational DBs. 我知道AppEngine不支持JOIN,所以它失败了.但我不确定如何在非关系环境中正确解决这个问题.我尝试过的一个解决方案是将Game变成一个抽象的基类,虽然这允许我以一种很好的方式对数据进行建模 – 它仍然无法解决上面的用例,因为它无法获得抽象的对象基类. 这里唯一的解决方案是将所有可能的运动的所有数据(并且只是将与特定运动无关的字段保留为空)放在游戏模型中,还是有更优雅的方法来解决这个问题? 编辑: 解决方法
django-nonrel中不允许多表继承的原因是因为Django为这些模型提供的API通常会使用JOIN查询,如您所知.
但我认为你可以手动设置Django用它的模型继承’sugar’做的同样的事情,并且避免在你自己的代码中进行连接. 例如 class Game(models.Model): gametime = models.DateTimeField() # etc class GameBasketball(models.Model): game = models.OneToOneField(Game) basketball_specific_field = models.TextField() 当你创建一个新的GameBasketball来创建相应的Game实例(你可以尝试一个自定义的管理器类)时,你需要一些额外的工作,但之后你至少可以做你想要的,例如 qs = Game.objects.filter(gametime=mydate) qs[0].gamebasketball.basketball_specific_field django-nonrel和djangoappengine在GitHub上有一个新家:https://github.com/django-nonrel/ 我不相信,除了GAE数据存储API本身的速度之外,python框架的选择有很大的不同,或者django-nonrel本身比webapp2慢. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |