如何从db.ListProperty中移除项目?

2 投票
2 回答
965 浏览
提问于 2025-04-17 01:58

在一个使用 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方法还有一个缺点,就是如果你想在数据存储请求中搜索列表,有时会生成非常大的索引。这对你来说可能不是问题,因为你的列表应该相对较小,但在未来的项目中要记得这一点。

撰写回答