【发布时间】:2012-01-19 07:28:03
【问题描述】:
我想按我的 Store 模型的开放时间对其进行排序。 Store 模型包含 is_open 函数,该函数控制 Store 的开放时间范围,并在它是否打开时生成一个布尔值。问题是由于效率问题,我不想手动对我的查询集进行排序。我想如果我编写一个自定义注释函数,那么我可以更有效地过滤查询。
于是我google了一下,发现我可以扩展Django的聚合类。据我了解,我必须使用预定义的 sql 函数,如 MAX、AVG 等。问题是我想检查今天的日期是否在给定的时间间隔列表中。所以任何人都可以帮助我应该使用哪个 sql 名称?
编辑
我想把代码放在这里,但它真的是意大利面条。一页长的代码只生成时间间隔并检查合适的时间间隔。
我想避免:
alg= lambda r: (not (s.is_open() and s.reachable))
sorted(stores,key=alg)
并替换为:
Store.objects.annotate(is_open = CheckOpen(datetime.today())).order_by('is_open')
但我完全不知道如何编写 CheckOpen...
【问题讨论】:
-
能否给我们一些来自
Store模型的代码,一个简短的数据示例和预期结果。
标签: django annotations aggregate