我有一个 MySQL 数据库,不幸与 Django 1.4.1一起使用。 如果我做对了,不同的功能仅适用于POSTGRESQL。
我必须创建一个由多个值组成的独特查询,而只包含不同的值,
像; 这个适用于POSTGRE但不适用于MYSQL, 我收到以下错误;
此数据库后端
不支持DISTINCT ON字段
staff = Staff.objects.order_by('person__full_name').distinct('person__full_name')
然后我试了
staff = Staff.objects.values('person__full_name','staff_job_categories').distinct().order_by('person__full_name')
但我没有得到明确的价值观,因为我也得到了员工职位类别。但是当我不包含它时,我无法将其作为数组。
有什么想法吗?
答案 0 :(得分:17)
.distinct([*fields])
仅适用于PostgresSQL。
来自distinct文档
这是区别。对于正常的distinct()调用,数据库在确定哪些行是不同的时比较每行中的每个字段。对于具有指定字段名称的distinct()调用,数据库将仅比较指定的字段名称。
如上所述,检查记录中的所有字段。在您的情况下,您很可能获得具有不同字段值的记录(如果您查询多个表ManyToMany或ForeignKey关系,则更有可能出现这种情况)。
要合并为数组,您可以参考之前的问题Django Query distinct values works but i cant use the query result
答案 1 :(得分:5)
names = Staff.objects.order_by('person__full_name').values('person__full_name').distinct()
会为您提供不同的全名,您可以做类似的事情来获得不同的职位类别。
这些将为您提供值列表,而不是对象本身,但如果我正确地解释您的问题,那么我认为这些将为您提供您想要的内容。