Найти - Пользователи
Полная версия: фильтрация по методу модели
Начало » Django » фильтрация по методу модели
1
tier
Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Спасибо
regall
tier
возможна ли фильтрация объектов не по значению поля, а по значению
Стандартными методами невозможна, так как методы filter, get генерируют SQL-запросы, а значения, возвращаемые методами модели, не хранятся в таблицах БД. Поэтому вам придется реализовывать такое самому, что значит большие тормоза при сравнительно великих объемах данных.
Возможно вам просто нужно пересмотреть архитектуру вашего прилоожения.
Ferroman
Может быть такое поле можно выразить и SQL-запросом.
Как вариант - можно создать процедуру/триггер на уровне базы, который и будет создавать нужное поле.
Evg
tier
Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Сохраните результат метода в поле бд и пользуйтесь обычным фильтром.
tier
Уточню, зачем это нужно.
В модели храним дату рождения человека. Метод, о котором речь, рассчитывает, сколько человеку полных лет на тек. момент. Понятно, что в отдельном поле эту цифру хранить нельзя, т.к. она меняется.
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Уже после создания темы я решил задачу обычным фильтром по полю с датой рождения и длинной-и-кривой формулой с datetime.date.
Если метод никак нельзя, ок, я понял, спасибо.
Странно, что вызывать метод в шаблоне можно (хотя, тоже будет тормозить при определенных условиях), а в фильтрах такого функционала нет до сих пор.
aliens
tier
И правильно что нет в фильтрах, фильтр работает с SQL
Evg
aliens
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Ну тогда в фильтре должен участвовать просто каждый раз изменяемый интервал (в зависимости от тек. даты) между которыми выбрать тех чью дни рождения попадают в него. Какая там может быть кривая и длинная формула?

И вообще если нужен такой фильтр по методу то для этого есть http://docs.python.org/library/functions.html#filter
Но понятное дело что он будет тормозить тк запрос будет по всем записям.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB