Владимир Куц
@fox_12 Автор вопроса, куратор тега Django
sim3x: Как-то тяжеловато... - мне нужно из первого запроса исключить элементы второго... А вывод данных у меня там постраничный..., если во вьюхе полный цикл по данным пробегать - у меня система умрет :) Нужно каким-то образом лепить тогда костыль с пагинацией.
Владимир Куц
@fox_12 Автор вопроса, куратор тега Django
sim3x: пользователь накладывает фильтр, делает выборку, просматривает карточки. Некоторые он берет и перемещает в начало. Затем накладывает другой фильтр, если карточки уже были им отобраны - они всплывают в в начале выборки в том порядке, в котором их разместил пользователь в предыдущих итерациях (они могут попадать в выборку, а могут фильтроваться). То есть в результате выборки мне нужно учесть порядок сортировки карточек, заданных пользователем. Сделать это по возможности наименьшим количеством запросов к базе и наименьшей тратой памяти (выборки и фильтры - очень "тяжелые")
Владимир Куц
@fox_12 Автор вопроса, куратор тега Django
sim3x: но мне не нужно фильтровать - мне нужно чтобы айтемы всплыли в порядке, заданном пользователем, для айтемов, которые существуют в CustomBullshit (там третье поле в модели должно быть - position) Можно конечно в крайнем случае их просто помечать, как у вас в примере, но хотелось бы именно сортировки. И сделать это без перебора отфильтрованного списка.
Владимир Куц
@fox_12 Автор вопроса, куратор тега Django
Хорошо. У меня в переменной q содержится queryset с уже наложенными фильтрами, какой шаг мне нужно проделать, чтобы наложить на него результат пользовательской сортировки?
Владимир Куц
@fox_12 Автор вопроса, куратор тега Django
un1t: про постраничный вывод слышали? Я нигде в вопросе и не собирался все это вместе на странице выводить. На практике ничего не тупит при количестве записей более полумиллиона. Именно поэтому интересует возможность сортировки, которая не убила бы производительность в данном случае.
Владимир Куц
@fox_12 Автор вопроса, куратор тега Django
Roman Kitaev: вот как раз в этом одна из сложностей. В новой выборке карточки поставленные первыми должны быть вверху - одна естественно становится первой, другая - второй в данной выборке в этом случае порядок не так важен. Но они обе должны быть в начале выборки. То есть в новой выборке - расставляем все первые карточки, затем все вторые, и так далее. Когда закончились отсортированные - выводим все остальные.
hamart: Верно. К сожалению, в таком случае крайне тяжело различить атакующего и легального пользователя, поэтому в данном тяжелом случае выбираем вариант - "сохранить деньги".