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

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上記の辞書で、テーブルレコードが値に格納され、PKeyがdictキーとして格納されている可能性があります。)

Sort_Order別の方法では、( 、 )を使用して一時テーブルを作成し、Pkeyそれをクエリに追加します。

Sort_Order        PKey
    1            31189
    2            31191
...

したがって、Sort_OrderとOpor.objectsで並べ替えると、指定した順序でPkeysが取得されます。

于 2012-09-01T19:39:10.410 に答える
1

http://davedash.com/2010/02/11/retrieveing-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の「ORDERBYFIELD」と同様のことを行います。

于 2012-09-02T00:34:35.967 に答える
1

この男: http: //blog.mathieu-leplatre.info/django-create-a-queryset-from-a-list-preserving-order.html

MySQLPostgreSQLの両方の問題を解決しました!

PostgreSQLを使用している場合は、そのページに移動してください。

于 2014-05-22T20:24:21.363 に答える