当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django RelatedManager.remove用法及代码示例


本文介绍django.db.models.fields.related.RelatedManager.remove的用法。

声明

remove(*objs, bulk=True)

从相关对象集中移除指定的模型对象:

>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.

add() 类似,在上面的示例中调用 e.save() 来执行更新。但是,将remove() 与多对多关系一起使用会删除使用 QuerySet.delete() 的关系,这意味着不会调用模型save() 方法;如果您希望在删除关系时执行自定义代码,请收听 m2m_changed 信号。

对于多对多关系,remove() 接受模型实例或字段值,通常是主键,作为 *objs 参数。

对于 ForeignKey 对象,此方法仅在 null=True 时存在。如果相关字段不能设置为 None ( NULL ),则无法从关系中删除对象而不将其添加到另一个对象。在上面的示例中,从 b.entry_set() 中删除 e 相当于执行 e.blog = None ,并且由于 blog ForeignKey 没有 null=True ,因此这是无效的。

对于 ForeignKey 对象,此方法接受bulk 参数来控制如何执行操作。如果True(默认),则使用QuerySet.update()。如果 bulk=False ,则改为调用每个单独模型实例的 save() 方法。这会触发 pre_save post_save 信号并以牺牲性能为代价。

对于多对多关系,bulk 关键字参数不存在。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.fields.related.RelatedManager.remove。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。