當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。