Чтобы избежать второго запроса, вы можете хранить все вопросов, за которые пользователь проголосовал, в одной сущности.Эта сущность может быть частью модели User или существовать в непосредственном отношении с сущностями User.
Затем вы можете загрузить эту информацию по мере необходимости (и сохранить ее в memcache, чтобы избежать загрузки хранилища данных)что вы можете быстро проверить, голосовал ли уже пользователь по какому-либо вопросу (большую часть времени не делая второго запроса).
Если пользователь может голосовать по действительно большому количеству вопросов, возможно, вам придетсярасширить эту идею.Вот набросок (не функционально завершенный) того, как вы могли бы пойти по простой схеме:
class UserVotes(db.Model):
# key = key_name or ID of the corresponding user entity
# if all of your question entities have IDs, then voted_on can be a list of
# integers; otherwise it can be a list of strings (key_name values)
voted_on = db.ListProperty(int, indexed=False)
# in your request handler ...
questions = ...
voted_on = memcache.get('voted-on:%s' % user_id)
if voted_on is None:
voted_on = UserVotes.get_by_id(user_id) # should do get_or_insert() instead
memcache.set(...)
for q in questions:
q.has_voted = q.key().id() in voted_on