我的模型有一些奇怪的行为。
我有事件模型,它跟踪事件。还有一个“聚合”模型,它存储模型 A 的记录聚合,按日期分组。
class Event(ndb.Model):
user = ndb.KeyProperty(kind=UserProfile)
date = ndb.DateTimeProperty(auto_now_add=True)
event_type = ndb.StringProperty()
is_aggregated = ndb.BooleanProperty(default=False)
class Aggregate(ndb.Model):
user = ndb.KeyProperty(kind=UserProfile)
date = ndb.DateProperty()
aggregates = ndb.PickleProperty(default={})
Event
有一个aggregate()
方法,像这样:
def aggregate(self):
if self.is_aggregated:
# already aggregated
return
# get an existing aggregate
agg = Aggregate.query(
Aggregate.user == self.user,
Aggregate.date == self.date.date()
).get()
if not agg:
# or create a new one
agg = Aggregate(
user=self.user,
date=self.date.date()
)
agg.put()
# update aggregate's count
if self.event_type not in agg.aggregates.keys():
agg.aggregates[self.event_type] = 0
agg.aggregates[self.event_type] += 1
agg.put()
# mark this as aggregated
self.is_aggregated = True
self.put()
现在,在我的处理程序中,每次Event
创建一个新的时,我都会调用它的aggregate
方法。但数字有一些出入。
例如,我有 20Event
条date
介于2013-10-10 00:00:00
和2013-10-10 23:59:59
和之间的记录event_type = "add"
,它们都有is_aggregated = True
. 这意味着该aggregate
方法为每个成功执行。
但是当我用 来查看相应的Aggregate
记录时date = 2013-10-10
,该aggregates
属性没有反映 20 个"add"
事件。它只有 16 个。
什么会导致这样的差异?怎么会self.put()
成功agg.put()
却不成功?