问题描述
||
我有一个问题模型和一个响应模型,谁的父母被设置为一个特定的问题,例如:
class Question(db.Model):
myQuestion = db.Stringproperty()
class Response(db.Model):
responder = db.ReferenceProperty(reference_class = User,collection_name = \'my_responses\')
myResponse = db.Stringproperty()
def createQuestion(self,user,question):
Question(myQuestion = question,parent = user).put()
def respond(self,question,response):
Response(responder = user,myResponse = response,parent = question).put()
给定用户,我如何获得用户未回答的所有问题?
解决方法
一种解决方案是保留用户已回答的问题列表。您可以将这些列表保留在用户的实体组中,并使用当前月份(例如)作为键名。
class QuestionsAnswered(db.Model):
answered = db.ListProperty(db.Key)
将QuestionsAnswered实体的键名设置为当月(对于实例,我喜欢\'201106 \'),然后将其放入用户的实体组中。这将使获取所需的可见列表变得容易。
要获取未见问题的列表,可以执行以下操作:
question_query = Questions.all().order(\'asked_date\')
questions = questions.fetch(50)
if not questions:
# return ... nothing to do here
month = questions[0].asked_date.strftime(\'%Y%m\')
answered_list = QuestionsAnswered.get_by_key_name(month,parent=user)
question_keys = [question.key() for question in questions]
new_question_keys = set(question_keys) - set(answered_list.answered)
您可以将其扩展为检查所返回问题中最早的月份。如果没有返回足够多的问题,您也可以将其扩展为再次获取。
, 正如Robert Kluin所建议的那样,您应该考虑向Question实体添加一个'responded \'属性。您仍然可以像这样实现相同的目标。但这是解决您问题的讨厌方法
questions=Question.all().ancestor(user)
result = []
for question in questions:
responded = Response.all().ancestor(question).get()
if responded is not None:
result.append(responded)