Используйте ключевые имена и (возможно) родительские объекты для отслеживания. Например, предположим, что у вас есть UserInfo
вид, вы можете сделать это следующим образом:
class NewsRating(db.Model):
# No explicit user reference, since it's the parent entity
rating = db.IntegerProperty(required=True)
news = db.ReferenceProperty(News) # We could get this from the key name, but this is more convenient
rating = NewsRating(parent=current_user, key_name=str(news.key().id()), news=news)
rating.put()
Попытка добавить один и тот же рейтинг несколько раз просто перезапишет существующий, или вы можете использовать транзакцию хранилища данных, чтобы добавить его атомарно.
Обратите внимание, что вы почти наверняка должны хранить общее количество рейтингов по отношению к сущности News
, а не подсчитывать рейтинги по каждому запросу, что становится менее эффективным по мере увеличения количества рейтингов.