#python #google-app-engine #filter
# #python #google-app-engine #Фильтр
Вопрос:
У меня есть веб-сайт событий с запросом, который должен выбирать все события, которые происходят сегодня или позже. Проблема в том, что некоторые события занимают более 1 дня, поэтому я хочу, чтобы запрос выполнял «выберите все события с датой окончания (until_date), равной или более поздней, чем сегодня, и отсортируйте их по дате начала (from_date)».
К сожалению, когда я делаю это, я получаю сообщение об ошибке «Свойство First ordering должно совпадать со свойством фильтра неравенства, если оно указано для этого запроса; получено от_date, ожидается до_date». Однако сортировка по until_date дает плохой результат.
В настоящее время я запускаю код, как показано ниже, но это означает, что событие, которое началось вчера и заканчивается завтра, не отображается в списке. Есть ли какой-либо способ обойти это?
С наилучшими пожеланиями, Винсент
class Event(db.Model):
author = db.StringProperty()
email = db.EmailProperty()
title = db.StringProperty()
url = db.LinkProperty()
in_city = db.StringProperty()
in_country = db.StringProperty()
from_date = db.DateProperty()
until_date = db.DateProperty()
register_date = db.DateTimeProperty(auto_now_add=True)
class EventsHandler(webapp.RequestHandler):
def get(self):
events = Event.all()
events.filter("from_date >=", datetime.date.today())
events.order("from_date")
template_values = {
'events': events,
}
self.response.out.write(template.render('templates/events.html', template_values))
Комментарии:
1. Вы должны хотя бы указать ORM, который вы используете.
2. Спасибо за ваш комментарий. Я использую Google App Engine, вы это имеете в виду?
3. Да, это довольно важная информация. Теперь люди, которые знают GAE, могут найти ваш вопрос и ответить на него.
4. Спасибо, я буду иметь это в виду.
Ответ №1:
Как указывает исключение, это невозможно сделать. Вы должны либо запрашивать для каждого дня, отсортированного по дате начала (используя свойство DateProperty, чтобы вы могли выполнять фильтр равенства по дате окончания), либо выполнять запрос без сортировки и сортировать результаты в памяти.
Комментарии:
1. Хорошо, я собираюсь попробовать, отсортировав его в памяти. Большое спасибо за ваш ответ!