我正在尝试理解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):
当我声明这一点时,Type
是employee
是什么?我不应该传递一个字符串吗?由于密钥是String
?
答案 0 :(得分:2)
实例方法的第一个参数是当前对象的句柄,应该调用self
。 This 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
类型的密钥添加到列表中。