Django Nonrel – 使用noSQL解决多表继承问题?

Django Nonrel – 使用noSQL解决多表继承问题?,第1张

概述我正在研究在Google的AppEngine上运行的 django-nonrel项目.我想为游戏创建一个模型,其中包含所有体育运动通常共有的细节 – 即游戏时间,状态,位置等.然后我为GameBasketball,GameBaseball等建模了特定的类,并且这些类继承自基类. 这会产生一个问题但是如果我想在某一天检索所有游戏的内容: Game.objects.filter(gametime=my 我正在研究在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变成一个抽象的基类,虽然这允许我以一种很好的方式对数据进行建模 – 它仍然无法解决上面的用例,因为它无法获得抽象的对象基类.

这里唯一的解决方案是将所有可能的运动的所有数据(并且只是将与特定运动无关的字段保留为空)放在游戏模型中,还是有更优雅的方法来解决这个问题?

编辑:
我更感兴趣的是在任何nosql设置中理解处理此类问题的正确方法,而不是特别在AppEngine上.即使您的答案不是GAE特定的,也请随时回复!

解决方法 django-nonrel中不允许多表继承的原因是因为Django为这些模型提供的API通常会使用JOIN查询,如您所知.

但我认为你可以手动设置Django用它的模型继承’sugar’做的同样的事情,并且避免在你自己的代码中进行连接.

例如

class Game(models.Model):    gametime = models.DateTimeFIEld()    # etcclass 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慢.

总结

以上是内存溢出为你收集整理的Django Nonrel – 使用noSQL解决多表继承问题?全部内容,希望文章能够帮你解决Django Nonrel – 使用noSQL解决多表继承问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1196631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存