pkd*_*dkk 38 django django-models django-aggregation django-filters
我怎么能这样做order_by......
p = Product.objects.filter(vendornumber='403516006')\
.order_by('-created').distinct('vendor__name')
Run Code Online (Sandbox Code Playgroud)
问题是我有多个同名的供应商,我只想要供应商的最新产品.
希望有道理吗?
我收到了这个DB错误:
SELECT DISTINCT ON表达式必须匹配初始ORDER BY表达式LINE 1:SELECT DISTINCT ON("search_vendor"."name")"search_product"...
Sto*_*ica 47
根据您的错误消息和另一个问题,在我看来这将解决它:
p = Product.objects.filter(vendornumber='403516006')\
.order_by('vendor__name', '-created').distinct('vendor__name')
Run Code Online (Sandbox Code Playgroud)
也就是说,似乎DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配.因此,通过将您使用的列distinct作为第一列order_by,我认为它应该可行.
kop*_*die 17
如果您希望将单独的字段用于不同的字段并按另一个字段排序,您可以使用以下代码
from django.db.models import Subquery
Model.objects.filter(
pk__in=Subquery(
Model.objects.all().distinct('foo').values('pk')
)
).order_by('bar')
Run Code Online (Sandbox Code Playgroud)
Dmi*_*sov 10
只匹配最左边的order_by()arg和distinct()对我来说不起作用,产生相同的错误(Django 1.8.7 bug或一个功能)?
qs.order_by('project').distinct('project')
Run Code Online (Sandbox Code Playgroud)
但当我改为:
qs.order_by('project_id').distinct('project')
Run Code Online (Sandbox Code Playgroud)
我甚至没有多个order_by args.
| 归档时间: |
|
| 查看次数: |
17797 次 |
| 最近记录: |