解决Django中 distinct 只对一个字段有用,同时查出其他字段

需求:

  需要从如下表结构中取出不重复的name数据,还有对应id,

id name
1 a
2 b
3 a
4 c

我期望得到的查询结果是:

id name
1 a
2 b
4 c

解决:

我试着这么写:

queryset = User.objects.values("id", "name").order_by("name").distinct()

结果依然是没有去重name字段的原始数据

去掉id改为:

queryset = User.objects.values("name").order_by("name").distinct()

发现查询结果为:

name
a
b
c

 

原来distinct关键字去重查询只能查出一列数据,即name,

但是只查出name没有意义,还需要查出对应的id

所以换为执行原生SQL查询

queryset = User.objects.raw("select id,name from user group by name;")

对应查询结果正确。