django clear()和delete()之间的区别

时间:2015-03-30 11:00:03

标签: python django

我现在正在使用django一段时间,最近碰到了这个:

user.groups.clear()

通常我要做的就是:

user.groups.all().delete()

有什么区别?

2 个答案:

答案 0 :(得分:12)

user.groups.all().delete() 删除相关的群组对象,而user.groups.clear()只会解除关系:

https://docs.djangoproject.com/en/1.7/ref/models/relations/#django.db.models.fields.related.RelatedManager.clear

  

从相关对象集中删除所有对象:   请注意,这不会删除相关对象 - 它只是将它们取消关联。

请注意,删除相关对象可能会产生副作用,即属于同一组的其他用户也可能会被删除(通过级联),具体取决于on_delete指定的ForeignKey规则。

答案 1 :(得分:4)

user.groups.clear()

这会取消群组与用户的关联,但不会影响群组本身。

user.groups.all().delete()

这会删除实际的组。您可能不希望这样做,因为可能还有其他用户属于这些组。