Django ORM去重

2019-06-06  本文已影响0人  ___大鱼___
distinct()具有去重功能是没有必要怀疑的,distinct()函数有一个隐藏特性,当使用distinct()函数的时候,如果不使用order_by()函数做跟随,那么该函数会自动把当前表中的默认排序字段作为DISTINCT的一个列,所以上述问题出现的原因是因为他没有使用order_by(‘name’)来屏蔽distinct()的那个特性,从而得出的distinct结果并不是仅仅以name一个列作为参数的,而是以id+name两列的值作为distinct参数,可以看到id列里面的值全部都是唯一值,所以得出来的结果必然是以id列的值为标准的,这也就是的原因,而如果想要实现上述例子中楼主的需求,正确的代码写法是:
 ContentType 表名
values('app_label').distinct() 去重字段
order_by('app_label')  排序字段

 ContentType.objects.values('app_label').distinct().order_by('app_label')
上一篇下一篇

猜你喜欢

热点阅读