Еще одна проблема пользовательского заказа QuerySet - PullRequest
0 голосов
/ 29 апреля 2011

Множество поисков, пока ничего не найдено.

В моем приложении django, Model_X оценивается моими пользователями с использованием очень стандартной модели оценок.У меня есть отдельная функция, которая обрабатывает много данных и при получении пользовательского экземпляра возвращает список кортежей.Первое значение соответствует первичному ключу для экземпляра Model_X, а второе - прогнозируемой оценке.Например, он может вернуть следующий список кортежей.

[(1L, 5.25), (5L, 3.1), (23L, 1.83)]

Мне нужно вернуть QuerySet (и это должен быть QuerySet) Model_X, содержащий только экземпляры, перечисленные в кортежах, отсортированные поэти предсказанные рейтинги из кортежей.

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Если ваш список рейтинговых кортежей уже упорядочен, вы можете использовать что-то из Упорядочение по порядку значений в предложении SQL IN () .

Если вы используете MySQL, функция field() должна работать для вас. Извлеките все идентификаторы из ваших отсортированных рейтинговых наборов, [x[0] for x in sorted_tuples], а затем используйте этот список идентификаторов для построения предложения where, например, (не проверено),

Model_X.objects.raw('select * from myapp_model_x where id in (5,1,23) order by field(id,5,1,23)']) 
0 голосов
/ 29 апреля 2011

Используйте список вместо QuerySet. Вы можете легко построить его, используя in_bulk

...