使用键(String)作为方法的参数

时间:2014-04-26 09:23:58

标签: python google-app-engine app-engine-ndb

我正在尝试理解Python中的方法。我的程序中有两个类。

class Department(ndb.Model):
  dept_name=ndb.StringProperty(required=True)
  employees=ndb.KeyProperty(repeated=True)

class Employee(ndb.Model):
   employee_name=ndb.StringProperty(required=True)
   salary=ndb.IntegerProperty()

我在Department

中有这个方法
def addEmployee(employee):
    dept = Department.get_or_insert("Finance")
    dept.employees.append.(employee.key)
    dept.put()

我从这样的RequestHandler打来电话:

    employee = Employee.get_by_id("David Moyes")
    dept = Department.get_or_insert("Finance")
    dept.addEmployee(employee)

我正在尝试将David Moyes添加到Finance部门。使用他的名字,这也是David Moyes数据存储区中Employee实体的关键。问题是,没有任何反应,也没有显示错误信息。 我怀疑这个问题来自行

def addEmployee(employee):

当我声明这一点时,Typeemployee是什么?我不应该传递一个字符串吗?由于密钥是String

1 个答案:

答案 0 :(得分:2)

实例方法的第一个参数是当前对象的句柄,应该调用selfThis is standard python oo programming

另外,在addEmployee方法中加载dept毫无意义 - 加载" Finance" - 如果您想将员工添加到销售部门怎么办?

我认为你的Department课程应该更像这样:

class Department(ndb.Model):
  dept_name = ndb.StringProperty(required=True)
  employees = ndb.KeyProperty(kind=Employee, repeated=True)

  def addEmployee(self, employee):
    self.employees.append(employee.key)
    self.put()

注意我还向员工kind=Employee添加了KeyProperty,这将验证您只将Employee类型的密钥添加到列表中。