Python Django ORM组由自定义函数

Python Django ORM组由自定义函数,python,django,postgresql,orm,Python,Django,Postgresql,Orm,我正在使用Django,我需要根据自定义函数对模型进行分组 好的,我想问的是: SELECT date_trunc('week',"model_table"."date") AS "date" FROM "model_table" GROUP BY "date" 那么我试过的是: 类DateTruncAggregate: 函数='date\u trunc' 模板=%functions'%date\u types',%expressions 日期类型=[‘微秒’、‘毫秒’、‘秒’、‘分钟’、‘小

我正在使用Django,我需要根据自定义函数对模型进行分组

好的,我想问的是:

SELECT date_trunc('week',"model_table"."date") AS "date" FROM "model_table" GROUP BY "date"
那么我试过的是:

类DateTruncAggregate: 函数='date\u trunc' 模板=%functions'%date\u types',%expressions 日期类型=[‘微秒’、‘毫秒’、‘秒’、‘分钟’、‘小时’、‘天’、‘周’、‘月’、‘季度’、‘年’、‘十年’、‘世纪’、‘千年’] def uuu init uuu self,日期类型,表达式,分组依据=False,**额外: self.must\u group\u by=group\u by Name group\u by已被使用。 如果日期类型不在self.date类型中: raise AttributeError“指定的日期类型不正确。” super.\uuuuu init\uuuuu表达式,日期类型=日期类型,**额外 def由colsself获取组: 如果self.must\u分组人: 返回[自我] 返回super.get\u group\u by\u cols 在[1]中:Model.objects.annotatedate=DateTrunc'week','date',True.values'date'.query.\uu Out[1]:“按型号表id、日期表周、型号表日期从型号表组中选择日期、型号表日期作为日期” 除了GROUP BY子句还插入表唯一id这一事实之外,它可以找到。这意味着最终结果根本没有分组

我一直在检查Django代码,在Query类中有一个函数集_group _,它把一切都搞糟了,但我真的不知道如何破解它

无论如何,我认为正确的方法是从Func类继承而不是聚合,但是我不能让Djangot在最终的SQL中插入GROUPBY子句


你知道如何在不使用游标、RawSQL或其他直接编写查询的方式硬编码查询的情况下解决这个问题吗?

好的,我找到了一种使用Func的方法,尽管它只是一个补丁。 因此,首先将自定义函数设置为:

类DateTruncFunc: 函数='date\u trunc' 模板=%functions'%date\u types',%expressions 日期类型=[‘微秒’、‘毫秒’、‘秒’、‘分钟’、‘小时’、‘天’、‘周’、‘月’、‘季度’、‘年’、‘十年’、‘世纪’、‘千年’] 定义初始自我、日期类型、表达式,**额外: 如果日期类型不在self.date类型中: raise AttributeError“指定的日期类型不正确。” super.\uuuuu init\uuuuu表达式,日期类型=日期类型,**额外 然后我们有一个简单的自定义函数,我们的查询可以是:

在[7]中:Model.objects.annotatedate=DateTrunc'week','date'。值为'date'。annotateAvg'parameter'。查询。_u Out[7]:“按日期从模型表组中选择日期“周”,模型表。日期作为日期,平均模型表。参数作为参数。模型表。日期” 在这个解决方案中,参数或聚合函数Avg可以是任意的,不使用。只是一个修复,使Django集团的日期,因为我想