Xun*_*ang 6 django distinct django-comments
在注释模型的任何字段上运行distinct()始终返回所有记录,
Comment.objects.values( '用户').不同的()
[{'user':1},{'user':0},{'user':0},{'user':0},{'user':0},{'user':1},{ 'user':1},{'user':1},{'user':1}]
Comment.objects.values( 'IP_ADDRESS').不同的()
[{'ip_address':u'127.0.0.1'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180 '},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u' 192.168.0.180' }]
为什么会这样?有没有解决的办法?谢谢!
ps:distinct()在我的测试期间在自定义模型的不同类型的字段中运行得非常好.关于评论框架的一些特别之处?
结论总结 感谢大家回答这个问题,再加上一些阅读,我得出如下结论:
在查找中使用distinct()将导致sql看起来像这样:
SELECT DISTINCT [fields1,fields2,fields3] FROM ... WHERE ...
并且所有字段的值一起决定记录是否唯一.这些字段可能来自查找中的values()或order_by()函数.
因此order_by()在与distinct()结合时添加一些不需要的效果,order_by中指定的字段也会考虑记录是否唯一
Django Comment默认有一个隐藏的order_by参数,从而创建了整个问题.任何模型在返回qs时都会隐藏order_by会导致同样的问题.
我还没有验证这是原因,但Comment模型有一个影响distinct()方法的默认排序:
In [1]: print Comment.objects.values('ip_address').distinct().query
SELECT DISTINCT "django_comments"."ip_address", "django_comments"."submit_date" FROM "django_comments" ORDER BY "django_comments"."submit_date" ASC
Run Code Online (Sandbox Code Playgroud)
这是一个记录在案的功能。
现在,怎么可能两条评论具有完全相同的时间戳?我想你使用的 MySQL 不支持任何少于一秒的内容。
如果您想摆脱默认排序,只需执行以下操作:
Comment.objects.order_by().values('ip_address').distinct()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3353 次 |
| 最近记录: |