0

次のことを行うより良い方法はありますか?

    if column_sort == 'size':
        if sort == 'desc':
            results = results.order_by('-size')
        else:
            results = results.order_by('size')
    elif column_sort == 'modified':
        if sort == 'desc':
            results = results.order_by('-last_modified')
        else:
            results = results.order_by('last_modified')
    else:
        if sort == 'desc':
            results = results.order_by('-path')
        else:
            results = results.order_by('path')
    results = results[:100]

たとえば、クエリの順序を逆にする方法は?

4

3 に答える 3

2

一度コードを書いてみませんか?

valid_column_sorts = ['size', 'last_modified', 'path']

if column_sort in valid_column_sorts:
    if sort == 'desc':
        column_sort = '-' + column_sort
    results = results.order_by(column_sort)

そうそう、並べ替えフィールドと値にはいくつかの違いがあることがわかりました。その場合、次のような単純なマップが必要ですresults.order_by(col_map[column_sort])

于 2013-02-03T20:52:08.343 に答える
1

より良い方法は、 dict を使用して の値をマップすることですcolumn_sort

d = {'size': 'size',
     'modified': 'last_modified',
     #... add more items as needed
    }

getディクショナリに値が含まれていない場合は、2 番目の引数でデフォルトを指定column_sortして、ディクショナリを呼び出す必要があります。

orderby = d.get(column_sort, "path")

sort変数については、'-'必要に応じて追加するだけです。

orderby = '-' + orderby if sort == "desc" else orderby

そして今それを実行してください:

results = results.order_by(orderby)
于 2013-02-03T20:54:25.593 に答える
0

これは次のように言うべきです:

columns = dict(size='size', modified='last_modified')
column_sort = columns.get(column_sort, 'path')
order = lambda v: '-' if v == 'desc' else ''
results.order_by(order(sort) + column_sort)

ユーザー指定の列名をスキーマに変換し、デフォルトが「パス」であると想定します。

于 2013-02-03T20:53:56.087 に答える