Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2010 00:37:04

tier
От:
Зарегистрирован: 2007-11-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтрация по методу модели

Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Спасибо



Офлайн

#2 Май 28, 2010 10:00:38

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

фильтрация по методу модели

tier
возможна ли фильтрация объектов не по значению поля, а по значению
Стандартными методами невозможна, так как методы filter, get генерируют SQL-запросы, а значения, возвращаемые методами модели, не хранятся в таблицах БД. Поэтому вам придется реализовывать такое самому, что значит большие тормоза при сравнительно великих объемах данных.
Возможно вам просто нужно пересмотреть архитектуру вашего прилоожения.



Офлайн

#3 Май 29, 2010 00:38:51

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

фильтрация по методу модели

Может быть такое поле можно выразить и SQL-запросом.
Как вариант - можно создать процедуру/триггер на уровне базы, который и будет создавать нужное поле.

Офлайн

#4 Май 29, 2010 10:09:19

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

фильтрация по методу модели

tier
Подскажите, возможна ли фильтрация объектов не по значению поля, а по значению, возвращаемому одним из методов модели? И, если да, то как?
Сохраните результат метода в поле бд и пользуйтесь обычным фильтром.



Офлайн

#5 Май 29, 2010 12:47:25

tier
От:
Зарегистрирован: 2007-11-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтрация по методу модели

Уточню, зачем это нужно.
В модели храним дату рождения человека. Метод, о котором речь, рассчитывает, сколько человеку полных лет на тек. момент. Понятно, что в отдельном поле эту цифру хранить нельзя, т.к. она меняется.
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Уже после создания темы я решил задачу обычным фильтром по полю с датой рождения и длинной-и-кривой формулой с datetime.date.
Если метод никак нельзя, ок, я понял, спасибо.
Странно, что вызывать метод в шаблоне можно (хотя, тоже будет тормозить при определенных условиях), а в фильтрах такого функционала нет до сих пор.



Отредактировано (Май 29, 2010 13:04:28)

Офлайн

#6 Май 29, 2010 13:48:39

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

фильтрация по методу модели

tier
И правильно что нет в фильтрах, фильтр работает с SQL



Офлайн

#7 Май 29, 2010 14:59:11

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

фильтрация по методу модели

aliens
Фильтрацией нужно отбирать всех, скажем, от 18, до 25 лет.
Ну тогда в фильтре должен участвовать просто каждый раз изменяемый интервал (в зависимости от тек. даты) между которыми выбрать тех чью дни рождения попадают в него. Какая там может быть кривая и длинная формула?

И вообще если нужен такой фильтр по методу то для этого есть http://docs.python.org/library/functions.html#filter
Но понятное дело что он будет тормозить тк запрос будет по всем записям.



Отредактировано (Май 29, 2010 15:03:51)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version