Форум сайта python.su
Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Спасибо
Офлайн
tierСтандартными методами невозможна, так как методы filter, get генерируют SQL-запросы, а значения, возвращаемые методами модели, не хранятся в таблицах БД. Поэтому вам придется реализовывать такое самому, что значит большие тормоза при сравнительно великих объемах данных.
возможна ли фильтрация объектов не по значению поля, а по значению
Офлайн
Может быть такое поле можно выразить и SQL-запросом.
Как вариант - можно создать процедуру/триггер на уровне базы, который и будет создавать нужное поле.
Офлайн
tierСохраните результат метода в поле бд и пользуйтесь обычным фильтром.
Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Офлайн
Уточню, зачем это нужно.
В модели храним дату рождения человека. Метод, о котором речь, рассчитывает, сколько человеку полных лет на тек. момент. Понятно, что в отдельном поле эту цифру хранить нельзя, т.к. она меняется.
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Уже после создания темы я решил задачу обычным фильтром по полю с датой рождения и длинной-и-кривой формулой с datetime.date.
Если метод никак нельзя, ок, я понял, спасибо.
Странно, что вызывать метод в шаблоне можно (хотя, тоже будет тормозить при определенных условиях), а в фильтрах такого функционала нет до сих пор.
Отредактировано (Май 29, 2010 13:04:28)
Офлайн
tier
И правильно что нет в фильтрах, фильтр работает с SQL
Офлайн
aliensНу тогда в фильтре должен участвовать просто каждый раз изменяемый интервал (в зависимости от тек. даты) между которыми выбрать тех чью дни рождения попадают в него. Какая там может быть кривая и длинная формула?
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Отредактировано (Май 29, 2010 15:03:51)
Офлайн