Пользовательская функция агрегирования даты - PullRequest
3 голосов
/ 13 декабря 2011

Я хочу отсортировать мои Store модели по времени их открытия.Модели магазина содержат функцию is_open, которая управляет диапазонами времени открытия магазина и выдает логическое значение, если он открыт или нет.Проблема в том, что я не хочу сортировать свой набор запросов вручную из-за проблем эффективности.Я подумал, что если я напишу пользовательскую функцию аннотирования, я смогу более эффективно фильтровать запрос.

Так что я погуглил и обнаружил, что могу расширить агрегатный класс Django.Из того, что я понял, я должен использовать предопределенные функции SQL, такие как MAX, AVG и т. Д. Дело в том, что я хочу проверить, что сегодняшняя дата находится в заданном списке временных интервалов.Так что кто-нибудь может мне помочь, какое имя sql я должен использовать?

Редактировать

Я хотел бы разместить код здесь, но это действительно спагетти.Код длиной в одну страницу генерирует только временные интервалы и проверяет подходящий.

Я хочу избежать:

alg= lambda r: (not (s.is_open() and s.reachable))
sorted(stores,key=alg)

и заменить на:

Store.objects.annotate(is_open = CheckOpen(datetime.today())).order_by('is_open')

Но я совершенно не понимаю, как написать CheckOpen ...

1 Ответ

1 голос
/ 13 декабря 2011

посмотрите документы на extra

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...