tier
Май 28, 2010 00:37:04
Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Спасибо
regall
Май 28, 2010 10:00:38
tier
возможна ли фильтрация объектов не по значению поля, а по значению
Стандартными методами невозможна, так как методы filter, get генерируют SQL-запросы, а значения, возвращаемые методами модели, не хранятся в таблицах БД. Поэтому вам придется реализовывать такое самому, что значит большие тормоза при сравнительно великих объемах данных.
Возможно вам просто нужно пересмотреть архитектуру вашего прилоожения.
Ferroman
Май 29, 2010 00:38:51
Может быть такое поле можно выразить и SQL-запросом.
Как вариант - можно создать процедуру/триггер на уровне базы, который и будет создавать нужное поле.
Evg
Май 29, 2010 10:09:19
tier
Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Сохраните результат метода в поле бд и пользуйтесь обычным фильтром.
tier
Май 29, 2010 12:47:25
Уточню, зачем это нужно.
В модели храним дату рождения человека. Метод, о котором речь, рассчитывает, сколько человеку полных лет на тек. момент. Понятно, что в отдельном поле эту цифру хранить нельзя, т.к. она меняется.
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Уже после создания темы я решил задачу обычным фильтром по полю с датой рождения и длинной-и-кривой формулой с datetime.date.
Если метод никак нельзя, ок, я понял, спасибо.
Странно, что вызывать метод в шаблоне можно (хотя, тоже будет тормозить при определенных условиях), а в фильтрах такого функционала нет до сих пор.
aliens
Май 29, 2010 13:48:39
tier
И правильно что нет в фильтрах, фильтр работает с SQL
Evg
Май 29, 2010 14:59:11
aliens
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Ну тогда в фильтре должен участвовать просто каждый раз изменяемый интервал (в зависимости от тек. даты) между которыми выбрать тех чью дни рождения попадают в него. Какая там может быть кривая и длинная формула?
И вообще если нужен такой фильтр по методу то для этого есть
http://docs.python.org/library/functions.html#filterНо понятное дело что он будет тормозить тк запрос будет по всем записям.