在Google应用程序引擎解决方案(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)
我通过简单地将Department键附加到db.ListProperty来创建多对多关系,如下所示:
employee.departments.append(department.key())
问题是,我不知道如何在不再需要这种关系的时候,再次真正消除这种关系。
我试过用谷歌搜索,但似乎找不到任何详细描述db.ListProperty的文档。
有什么想法或推荐信吗?
最佳答案
ListProperty
只是一个Pythonlist
和一些helper方法,让它与GAE一起工作,所以任何应用于alist
的东西都应用于aListProperty
。
employee.departments.remove(department.key())
employee.put()
请记住,每次进行更改时,都必须对数据进行反序列化/重序列化,因此,如果您在添加或删除单个值时寻找速度,则可能需要使用另一种建模关系的方法,如this page的“关系模型”部分中的方法。
如果要搜索数据存储请求中的列表,则
ListProperty
方法有时也有producing very large indexes的缺点。这对你来说可能不是问题,因为你的列表应该相对较小,但在未来的项目中要记住这一点。