Как сделать заказ по полю, хранящемуся в отдельной модели? - PullRequest
0 голосов
/ 16 октября 2011

Вот упрощенная версия структуры моего хранилища данных:

class News(db.Model):
    title = db.StringProperty()

class NewsRating(db.Model):
    user = db.IntegerProperty()
    rating = db.IntegerProperty()
    news = db.ReferenceProperty(News)

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

news = News.all()
# filter by additional parms
# news.filter("city =", "1")
news.order("-added") # ?
for one_news in news:
    self.response.out.write(one_news.title()+'<br>')

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Для этого вам нужно будет выполнить запрос, извлекающий каждую NewsRating ссылку на вашу сущность News и суммировать все рейтинги (поскольку хранилище данных не предоставляет JOIN).Это будет огромной задачей как по времени, так и по затратам.Я бы рекомендовал взглянуть на пример just-overheard-it в качестве ориентира.

1 голос
/ 16 октября 2011

Запросы имеют доступ только к сущности, к которой вы обращаетесь, если у вас есть свойство от другой сущности (или какой-либо совокупный расчет, основанный на полях из других сущностей), которое вы хотите использовать для упорядочения результатов, вы собираетесьнеобходимо сохранить его в объекте, с которым вы запрашиваете.

В случае рейтингов это может означать периодическое задание, которое суммирует рейтинги и распределяет их по статьям.

...