gpt4 book ai didi

django - 在 django-nonrel 中过滤外键属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:28 26 4
gpt4 key购买 nike

在非关系数据库中基于外键属性进行过滤的最佳做法是什么?我知道缺少 join 支持会使事情变得更加复杂,所以我想知道其他人是如何解决这个问题的。

在我的例子中,我有事件,它们属于站点,属于区域。我想过滤给定区域中的所有事件。 Event 有一个 site 属性,它是 Site 的外键,而 Site 又有一个 region foreign Region 的键:

region = Region.objects.get(id=regionID)
events = Event.objects.filter(site__region=region)

这是行不通的,因为 site__region 需要一个join,而在 Google App Engine 上运行的 django-nonrel 不支持它。 (我收到 Caught DatabaseError while rendering: This query is not supported by the database. 作为错误。)因此,我一直在遍历事件,将匹配的事件添加到列表中:

events = list()
region = Region.objects.get(id=regionID)
for event in Event.object.all():
if event.site.region==region:
events.append(event)

这是做事的好方法吗?我忽略了一些愚蠢的事情吗?提前致谢!

最佳答案

这是一个非常低效的解决方案,因为您取消了对站点和区域的引用,从而导致大量查询。这不会扩展到您的数据库中可能超过 100 个事件。

最好的解决方案是通过复制例如在 save() 上将该区域的 id 放入事件中。然后你可以直接做Event.objects.filter(region_id=regionID)。生成的代码变得不那么干净和可维护,但这就是非关系数据库的工作方式,今天

我现在只能说:如果可以,请等到一月底。 ;)

关于django - 在 django-nonrel 中过滤外键属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4541654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com