3

我有一个 pk 列表,我想以与我的列表定义相同的顺序获得结果......但是元素的顺序正在改变。任何人如何帮助我?

print list_ids

[31189、31191、31327、31406、31352、31395、31309、30071、31434、31435]

obj_opor=Opor.objects.in_bulk(list_ids).values()

for o in obj_oportunidades:
   print o

31395 31435 31434 30071 31309 31406 31189 31191 31352 31327

这个对象应该在模板中使用,向用户显示一些结果......但是你怎么看,顺序与原来的list_ids不同

4

3 回答 3

1

这家伙:http ://blog.mathieu-leplatre.info/django-create-a-queryset-from-a-list-preserving-order.html

解决了MySQLPostgreSQL的问题!

如果您使用的是 PostgreSQL,请转到该页面。

于 2014-05-22T20:24:21.363 回答
1

我在以下网址找到了一个解决方案: http: //davedash.com/2010/02/11/retrieving-elements-in-a-specific-order-in-django-and-mysql/它非常适合我。

ids = [a_list, of, ordered, ids]
addons = Addon.objects.filter(id__in=ids).extra(
        select={'manual': 'FIELD(id,%s)' % ','.join(map(str,ids))},
        order_by=['manual'])

这段代码做一些类似于 MySQL "ORDER BY FIELD" 的事情。

于 2012-09-02T00:34:35.967 回答
1

如果在 SQL 中具有此功能会很好 - 按已知的值列表排序。

相反,您可以做的是:

obj_oportunidades=Opor.objects.in_bulk(list_ids).values()

all_opor = []
for o in obj_oportunidades:
    print o
    all_opor.append(o)

for i in list_ids:
    if i in all_opor:
        print all_opor.index(i)

缺点是您必须先获取所有结果行并存储它们,然后才能按照您想要的顺序获取它们。(all_opor可以是上面的字典,表记录存储在值中,PKeys 作为字典键。)

其他方式,使用 ( Sort_Order, Pkey) 创建一个临时表并将其添加到查询中:

Sort_Order        PKey
    1            31189
    2            31191
...

因此,当您对 Sort_Order 和 Opor.objects 进行排序时,您将按照您指定的顺序获得 Pkeys。

于 2012-09-01T19:39:10.410 回答