我无法提供良好的数据模型和查询,这些模型和查询可以很好地扩展,以便像Google日历的事件和资源那样建模数据。
资源在用户之间共享,资源一次只能在一个事件中。资源将具有多个事件,但这些事件不能重叠或同时发生。事件也可以有多个资源。
class event(db.Model):
#user that created/owns the event
user = db.ReferenceProperty(user, collection_name='events',required=True)
#an event can have multiple resources
resources = db.StringListProperty() # resource key(s)
#when the event opens and closes (start/stop)
opendt = db.DateTimeProperty()
closedt = db.DateTimeProperty()
class resource(db.Model):
name = db.StringProperty(required=True)
使用这些数据模型,我无法在创建活动时提供快速,可扩展的方式来获取可用资源列表。
我觉得随着更多事件和资源的添加,这个过程会越来越慢。我也不知道如何能够对资源的最终结果进行分页。
当用户创建新事件时,在他们输入新事件的开始/停止日期时间后,我希望他们能够快速查看该时间段的可用资源。
有更好,更有效的方法吗?
答案 0 :(得分:0)
在我的头顶,这将工作: 1.使用长整数来表示你的时间块,有点像Unix计时器,但是使用大块时间,所以说每个增量代表15分钟。即0 = 1/1/2012 00:00,1 = 1/1/2012 00:15,2 = 1/1/2012 00:30等
在你的资源和事件中,存储一个长整数的ListProperty,用于它们被占用的所有时间量。
如果要查看资源或事件在某个特定时间点是否处于“活动状态”,只需计算该时间块的长整数值,然后使用“in”过滤器在ListProperty中搜索它。查询。