数据建模Appengine

时间:2013-01-15 21:13:03

标签: google-app-engine data-modeling

目前我有3个数据存储类

用户 事件 车间

每个研讨会都参考一个活动,每个活动只有四个研讨会

在用户类中,我有一个list属性,我在其中引用了每个用户所参与的研讨会的键。

我希望每个用户只参加一个研讨会活动。

@classmethod
def event_attendance(self, user):
    workshop1 = self.workshops.filter('workshop_number =', 1).get(keys_only = True)
    users1 = User.all().filter('attendance =', workshop1.key()).fetch(149)
    if user in users1:
        return True
    else:
        workshop2 = self.workshops.filter('workshop_number =', 2).get(keys_only = True)
        users2 = User.all().filter('attendance =', workshop2.key()).fetch(149)
        if user in users2:
            return True
        else:
            workshop3 = self.workshops.filter('workshop_number =', 3).get(keys_only = True)
            users3 = User.all().filter('attendance =', workshop3.key()).fetch(149)
            if user in users3:
               return True
            else:
                workshop4 = self.workshops.filter('workshop_number =', 4).get(keys_only = True)
                users4 = User.all().filter('attendance =', workshop4.key()).fetch(149)
                if user in users4:
                    return True
                else:
                    return False

在这里,我查看了一个事件,看看用户是否参加了任何一个研讨会,并且使用下面的方法了解他们是否参加了此次活动的研讨会,以找到哪一个。

@classmethod
def My_Event(self, user):
    workshop1 = self.workshops.filter('workshop_number =', 1).get(keys_only = True)
    users1 = User.all().filter('attendance =', workshop1.key()).fetch(149)
    if user in users1:
        return workshop1
    else:
        workshop2 = self.workshops.filter('workshop_number =', 2).get(keys_only = True)
        users2 = User.all().filter('attendance =', workshop2.key()).fetch(149)
        if user in users2:
            return workshop2
        else:
            workshop3 = self.workshops.filter('workshop_number =', 3).get(keys_only = True)
            users3 = User.all().filter('attendance =', workshop3.key()).fetch(149)
            if user in users3:
               return workshop3
            else:
                workshop4 = self.workshops.filter('workshop_number =', 4).get(keys_only = True)
                users4 = User.all().filter('attendance =', workshop4.key()).fetch(149)
                if user in users4:
                    return workshop4

我很新兴的事实上是编程新手(主要是自学)

考虑到我必须以这种方式检查每个事件以查看用户是否已连接,这感觉非常昂贵,有没有办法使用我当前的数据建模结构更有效地执行此操作,还是应该更改它?

1 个答案:

答案 0 :(得分:0)

首先,您使用@classmethod。确保这是你想要的(在这种情况下这看起来很奇怪)。 其余的:在这两个函数中,您都拥有了users-object。你为什么不拿这个用户, 检查其出勤属性,并仅获取那里列出的研讨会? (如果需要提取研讨会,“def event_attendance”检查用户是否有非空的出勤列表可能会有诀窍)

相关问题