Я не знаю, как сделать это с помощью условия фильтра. Если ваша база данных будет возвращать строки в порядке предложения IN
, тогда вы сможете комбинировать метод Django extra
с ROWNUM
, предоставленным вашей базой данных, для достижения этого.
Например ::100100
queryset = MyModel.objects.filter(pk__in=[pk_list]).extra(
select: {'rownum': 'row_num()'}).order_by('rownum')
Где row_num()
предполагается как функция базы данных, которая возвращает номер строки текущей строки. Postgresql 8.4+ поддерживает row_num()
, но я не знаю, как упорядочить строки, возвращенные в том же порядке, что и значения в предложении IN
.
Я думаю, что лучше было бы использовать подкласс ModelMultipleChoiceField
и добавить собственную логику сортировки при рендеринге.