需求: 篩選 id 在一個列表中, 并按照列表的順序來排序
舉例: user表中,想篩選出 id 為 1,3, 4, 2的用戶, 并讓數(shù)據(jù)按照這個順序排列。
其實有一個MySQL函數(shù)可以非常方便的處理此需求
那就是 field()函數(shù)
select * from `user` where id in (1,3, 2,4) order by FIELD( `id`,1,3,2,4)
Django中,沒有field函數(shù)。 需要用extra() 實現(xiàn)
id_list = [1, 3, 4, 2]
field_order = ','.join(map("'{}'".format, id_list ))
queryset = User.objects.filter(id_in=id_list ).extra(
select={'manual': "FIELD(`id`, {})".format(field_order)},
order_by=['manual'])