• Django ORM: Как отсортировать по prefetched_set?

    @Mekalure Автор вопроса
    Нет, я пока забил на это дело. Когда будет время протестирую
  • Django ORM: Как отсортировать по prefetched_set?

    @Mekalure Автор вопроса
    Есть еще один вариант. Я его опробую когда будет время, order_by приминает как строки, так и QueryExpressions, вполне возможно, что ему на вход можно подсунуть хитрый SubQuery или нечто подобное.
  • Django ORM: Как отсортировать по prefetched_set?

    @Mekalure Автор вопроса
    werevolff, Не трудно. А ты можешь вариант с FilteredRelation оформить как отдельный ответ, что бы другие не собирали мои грабли?
  • Django ORM: Как отсортировать по prefetched_set?

    @Mekalure Автор вопроса
    Ещё посмотри вот это. Я так понимаю, у тебя там старая джанга. А эта штука появилась с версии 2.0. Если не критично до неё обновиться, то смотри какая тут красивая картина: оно объявляется в annotation, а значит, будет доступно в order_by


    Джанга не старая и этот метод реально работает. Можно задать это в аннотацию и потом отсортировать по нему. Что странно, к этой аннотации нельзя обратится как к атрибуту `AttributeError`. В SQL делает inner join к нужной таблице, фильтруется и по доб. параметрам и по человеку, всё как надо.

    Но поскольку к анотации нельзя обратится, все еще нужен Perfetch, что-бы вывести эти номера во view. Получается дважды данные гоняю в аннотации и отдельным запросом в Prefetch.

    Но это работает и это главное. Спасибо за содействие.

    p.s. Все равно осталось ощущение есть другой вариант
  • Django ORM: Как отсортировать по prefetched_set?

    @Mekalure Автор вопроса
    Если по нему потом можно делать order_by, то это иммено то что нужно. Сейчас проверю


    Задал to_attr='numbers', order_by=('numbers__number'), вышло исключение Cannot resolve keyword 'numbers' into field. Что, блин, логично.

    Не совсем понял как так можно саннотировать set в одно значение.


    Кажется, я понял что ты предлагаешь. К сожалению, эти номера назначаются человеком и текущими функциями аннотаций выдернуть этот номер не получится.
  • Django ORM: Как отсортировать по prefetched_set?

    @Mekalure Автор вопроса
    А то, что ты в prefetch получаешь, нельзя как-нибудь прогнать через annotation? А потом уже с аннотации сортировать?


    Не совсем понял как так можно саннотировать set в одно значение. Знаю у Postgres есть агрегация в Array, но это не то.

    class Prefetch(lookup, queryset=None, to_attr=None)
    The to_attr argument sets the result of the prefetch operation to a custom attribute.


    Если по нему потом можно делать order_by, то это иммено то что нужно. Сейчас проверю