错误:没有运算符匹配给定的名称和参数类型

时间:2015-11-14 10:51:33

标签: python django django-queryset

我有一个名为Group的模型,另一个名为Reply的模型包含一个属性,该属性是Group的外键。此属性名为which_group

接下来,对于Group对象的查询集,我注释了一个名为 latest 的相关对象,它只是与每个对象相关的Max(reply__id)。这个结果查询集我称为

接下来我做了以下事情:

 values = tuple([(group.id, group.latest) for group in groups])
 replies = Reply.objects.extra(where=['(which_group_id,id) IN %s' % (values)])
 replies = list(replies)
 return replies

我在群组中有一个对象的用户测试了此代码。它给我一个错误:

运算符不存在:record = integer 第1行:...... se" FROM" links_reply" WHERE((which_group_id,id)IN(1,52)......                                      ^ 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我该如何解决这个问题?

P.S。我的数据库是Postgres(已知它是"强类型")

2 个答案:

答案 0 :(得分:2)

我认为使用不同的查询更容易实现目标,而不是处理sql强制转换和额外语句。如果您需要获得按where_group_id值分组的回复并且其组的max(id),那么您需要尝试此查询

Reply.objects.values('which_group_id').annotate(Max('id'))

更新: 如果您需要包含每个组对象的最新回复的列表,您需要的是:

>>> ids = Reply.objects.values('which_group_id').annotate(Max('id'))
                                                .values_list('id__max', flat=True)
>>> replies = Reply.objects.filter(id__in=ids)

答案 1 :(得分:0)

可能有误,但您的问题是由您的IN子句引起的。

(which_group_id,id)就SQL而言是一个不正确的表达式。将其拆分为2个AND子句,例如:which_group_id IN [values_list] AND id IN [values_list]