我在这些领域有一个'Thing'模型:
name: TextField
category: TextField
date: DateField
我首先对名称进行icontains查询:
Thing.objects.filter(name__icontaints='substring')
我的问题是如何过滤该结果,只提供每个类别中最新的项目。
如果我得到三个“小部件”类别的结果,我只想在结果集中使用一个小部件 - 最新的小部件。
我天真的解决方案是遍历查询集,保留最近日期的记录并构建新的结果集。有没有更好的办法?最好是在数据库级别工作。
答案 0 :(得分:2)
不幸的是,由于查询差异很大,所以无法在所有数据库中可靠地执行此操作。
使用MySQL,您可以执行以下操作:
SELECT
name,
category,
date
FROM
thing
WHERE
name LIKE '%substring%'
GROUP BY date
使用PostgreSQL会是这样的:
SELECT
DISTINCT ON (category)
name,
category,
date
FROM
thing
WHERE
name LIKE '%substring%'
ORDER BY date DESC
如果您使用的是PostgreSQL,则可以使用此修补程序获得DISTINCT ON
支持:http://code.djangoproject.com/ticket/6422