如何从db.ListProperty中移除项目?
在一个使用 Google App Engine 的解决方案中(用 Python 编写),我使用了 db.ListProperty 来描述多对多的关系,像这样:
class Department(db.Model):
name = db.StringProperty()
@property
def employees(self):
return Employee.all().filter('departments', self.key())
class Employee(db.Model):
name = db.StringProperty()
departments = db.ListProperty(db.Key)
我通过简单地把部门的键添加到 db.ListProperty 来创建多对多的关系,像这样:
employee.departments.append(department.key())
但问题是,当这个关系不再需要时,我不知道该怎么去删除它。
我试着在网上搜索,但似乎找不到详细描述 db.ListProperty 的文档。
有没有什么想法或者参考资料?
2 个回答
1
通过反复尝试找到了这个:
employee.departments.remove(department.key())
3
ListProperty
其实就是一个Python的list
,不过它有一些额外的辅助方法,能让它在GAE(谷歌应用引擎)上更好用。所以,任何适用于list
的操作,也都适用于ListProperty
。
employee.departments.remove(department.key())
employee.put()
要记住的是,每次你对数据进行修改时,都需要把数据进行反序列化和序列化。如果你希望在添加或删除单个值时速度更快,可能需要考虑其他的关系建模方法,比如在这个页面的关系模型部分提到的那种。
另外,ListProperty
方法还有一个缺点,就是如果你想在数据存储请求中搜索列表,有时会生成非常大的索引。这对你来说可能不是问题,因为你的列表应该相对较小,但在未来的项目中要记得这一点。